systemdを使用して多数のサービスを開始したい(例:256)。幸いなことに、systemdはスライスを提供し、サービスの説明を非常に簡単に再利用できます。ただし、複数のプロセスを同時に開始すると、各プロセスはいくつかの開始計算を実行し、負荷が50を超えるため、システムはシャットダウンします。
スライスを使用して、すべてのサービス (After=service@%(i-1).service Wants=service@%(i-1).service) の依存関係チェーンを定義できますか?または、サービスプールのようなものを定義してから、システムでサービスの開始を管理できますか?つまり、すべてのサービスを一度に実行するのではなく、次のチャンクを開始する前に一度に10のサービスを開始しますか?
ベストアンサー1
を使用して良い解決策を見つけましたExecStartPost
。
% systemctl --user cat example@
# /home/joerg/.config/systemd/user/[email protected]
[Unit]
Description=Example of service farm; instance %i
[Service]
Type=simple
ExecStart=/bin/sleep 99999
ExecStartPost=/bin/sh -c 'test %i -gt 0 || exit 0 ; systemctl --no-block --user start %p@$((%i - 1))'
% systemctl --user start example@2
% systemctl --user status example.slice
● example.slice
Loaded: loaded
Active: active since Thu 2017-04-27 11:04:43 CEST; 27min ago
CGroup: /user.slice/user-1000.slice/[email protected]/example.slice
├─[email protected]
│ └─19423 /bin/sleep 99999
├─[email protected]
│ └─19420 /bin/sleep 99999
└─[email protected]
└─19417 /bin/sleep 99999