Type=simple
の場合 ユニット ファイルでは、ExecStart を 1 つしか指定できませんが、ExecStartPre
をいくつでも追加できます。 、 ExecStartPost
、しかし、これらは連続して実行され、次のコマンドを開始する前にすべての開始が強制終了されるため、長時間実行されるコマンドには適していません。
Type=oneshot
の場合 複数の ExecStart を指定できます。これらは、並列ではなくシリアルに実行されます。
複数のユニットを並行して実行したい場合、できることがいくつかあります:
1 つのパラメーターが異なる場合
テンプレート単位を使用できるので、 /etc/systemd/system/[email protected]
を作成します . 注: (@
重要です)。
[Unit]
Description=script description %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=multi-user.target
そして、次のように実行します:
$ systemctl start [email protected] [email protected]
または...
ターゲットの依存関係
単一のターゲットにリンクする複数のユニットを作成できます:
#/etc/systemd/system/bar.target
[Unit]
Description=bar target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
そして、.service ユニットを WantedBy=bar.target
に変更するだけです いいね:
#/etc/systemd/system/[email protected]
[Unit]
Description=script description %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=bar.target
次に、並行して必要な foo サービスを有効にし、次のように bar ターゲットを開始します:
$ systemctl daemon-reload
$ systemctl enable [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target
注: これは、テンプレート ユニットだけでなく、あらゆるタイプのユニットで機能します。
ExecStartPre
を使用できます または ExecStartPost
スクリプトの 1 つ
[Unit]
Description=script description
[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target