ExecConditionはサービスの開始を妨げません。

ExecConditionはサービスの開始を妨げません。

ExecConditionシャットダウンを使用してもstatus=1/FAILUREデーモンの起動を妨げないサービスファイルがあります。

私は文書によると、デーモンが始まるだけでなく、他のすべてのExecStartPreコマンドが実行されるのを防ぐ必要があると思います。

ExecCondition =コマンドが終了コード1〜254(含む)で終了すると、残りのコマンドはスキップされ、デバイスは失敗としてマークされません。

systemd.service ドキュメント

毎回明らかに失敗する条件を立てました。ExecCondition=-sh -c 'exit(1)'

ここにサービスファイルがあります(無実の人々を保護するために名前が変更されました)。

[Unit]
Description=Application
Wants=x-ray.service yankee.service zulu.service
Requires=alpha.service bravo.service
After=x-ray.service charlie.service bravo.service

[Service]
ExecCondition=-sh -c 'exit(1)'
ExecStartPre=-sh -c 'prestartShellScript.sh'
ExecStart=/opt/app/app argument1 argument2
WatchdogSec=10
Restart=always
RestartSec=10
WorkingDirectory=/opt/app
TimeoutSec=10

[Install]
WantedBy=multi-user.target

ただし、サービスを開始すると、systemctl status app次のようにアプリケーションが実行中であり、他のプロセスも実行中であることがわかります。

     Active: active (running) since Fri 2020-02-07 18:06:57 UTC; 6s ago
    Process: 33783 ExecCondition=/bin/sh -c exit(1) (code=exited, status=1/FAILURE)
    Process: 33796 ExecStartPre=/bin/sh -c prestartShellScript.sh (code=exited, status=0/SUCCESS)
   Main PID: 33827 (app)
      Tasks: 19 (limit: 4177)
     Memory: 101.5M
     CGroup: /system.slice/app.service
             └─33827 /opt/app/app argument1 argument2

私もExecCondition変わったのにExecStartPre同じ症状が出ますね。

ベストアンサー1

コマンドの前には、-すべてのExec * =パラメータで許可されている共通フラグであるが、特に「終了コードを無視してコマンドを常に成功したものとして扱う」という意味です。-コマンドが障害を報告したときにsystemdが装置を失敗させたい場合は、使用しないでください。

おすすめ記事