i異なる入力パラメーターで開始された同じスクリプトでサービスを作成できるかどうかを知ります。といった:
[Unit]
Description=script description
[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target
出来ますか?その後、シリアルモードで起動しますか?または2つの異なるプロセスに?宜しくお願いします
ユニットファイルでType=simple
の場合、1つのExecStartしか指定できませんが、ExecStartPre,
ExecStartPost`を追加できますが、これらはシリアルで実行されるため、長時間実行するコマンドには適していません。 startは、次のものを開始する前に強制終了されます。
Type=oneshot
で複数のExecStartを指定できる場合、それらは並行ではなく連続して実行されます。
複数のユニットを並行して実行したい場合、いくつかのことができます:
テンプレートユニットを使用できるため、/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
注:これは、テンプレートユニットだけでなく、あらゆるタイプのユニットで機能します。
スクリプトの1つにExecStartPre
またはExecStartPost
を使用できます
[Unit]
Description=script description
[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target