systemdを使用して複数のサービスを開始する

systemdを使用して複数のサービスを開始する

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

おすすめ記事