GNU/Linux >> Linux の 問題 >  >> Linux

複数のexecStartを持つSystemd

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

Linux
  1. systemctlを使用して複数のサービスインスタンスを管理する

  2. Sedコマンドで一度に複数のパターンを使用する

  3. Systemdはまだランレベルについて知っていますか?

  1. Runitを使用したUpstart/systemdに関するこのエラー?

  2. Systemdユニットファイルを入れますか?

  3. Systemdを使用した非グラフィカルブート?

  1. CentOS / RHEL 7 :systemd でランレベル (ターゲット) を変更する方法

  2. Linux での複数スレッドによるシグナル処理

  3. bashで複数の小数を使用して数値をソートする