web-dev-qa-db-ja.com

フリート/ systemdでゼロ以外の終了コードをリセット/無視

backup.servicebackup.timerによって毎時間呼び出されます。残念ながら、コンテナ内で実行されているバックアップスクリプトはを完了できますが、警告が発生してゼロ以外の終了コードが返されます。そのため、すべてが機能している可能性がありますが、コンテナはゼロ以外の終了コードで停止します。したがって、ユニットは艦隊でfailed状態になります。

その場合は、systemdのドキュメントでそれを言っているものは何も見つかりませんでしたが、タイマーがこのユニットを再び起動しないようです。

明確にするために、ゼロ以外の終了コードでコンテナを停止することは完全に問題ありません。しかし、タイマーが機能しなくなります。

これで、そのスクリプトを別のスクリプトにカプセル化して、次にals docker entrypointと呼びます。しかし、出力auf STDOUTおよびSTDERRが何らかの形で保持されることを確認する必要があります。

ユニットに障害が発生した後、Sudo systemctl reset-failedを実行することもできましたが、これは私には少しハッキーなようです...ユニットを再び使用します。ただし、サービスファイルのExecStopPost-Taskとしては機能しません)

ユニットを確認するより良い方法はありますか

  • ゼロ以外の値が返されても失敗状態にならない、または
  • 後で状態をリセットする、または
  • ステータスがfailedであるにもかかわらず、そのユニットを実行するようにタイマーに指示しますか?
8
Julian Kaffke

コマンドの前に-を付けると、systemdは失敗を無視し、ユニットを失敗状態にしません。したがって、代わりに

ExecStart=/path/to/your/command 

試す

ExecStart=-/path/to/your/command 

詳細は systemd のマニュアルページを参照してください。

5
Paul Dixon

someの戻り値を無視したいが、一部のothersをエラーとしてsystemdにカウントさせたい場合は、それらを指定できますSuccessExitStatusRestartPreventExitStatus、およびRestartForceExitStatusへのスペース区切りリストとしての.serviceファイルの[Service]セクション。これらも信号名を取ります。

参照: man 5 systemd.service

2
azrdev