systemdサービスのマンページを数回読んだことがありますが、基本的なsystemdパターンはまだわかりません。
起動時に1回(ドッカーコンテナーのように、またはドライブをフォーマットして)起動プロセスを1回実行し、正常に完了したい。しかし、そのためにType = oneshotを使用する場合、Restart = on-failureを使用できません。また、失敗した場合、ジョブを再試行しません。ここで明らかな何かを見逃していますか?
また、Restart = on-failureでType = simpleを設定しようとしましたが、多くの場合、oneshotサービスが提供する次の動作(マンページから)が必要です。
ワンショットの動作は単純に似ています。ただし、systemdがフォローアップユニットを開始する前にプロセスを終了する必要があります。
更新:
FailureAction =を見ましたか?
—
Centimane
Restart=
設定と同じことを達成できる場合がありますFailureAction=[self.unit]
([self.unit]をユニットの名前に置き換えます)。それは一種のハックですが、少なくとも明示的で簡単にフォローできます。
@Centimaneはと
—
jpkotta
FailureAction
同じ値を取り、StartLimitAction
すべてnone
が何らかのシャットダウンをトリガーします。
Restart
し、ラップmy_cmd
:このようなExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
、一緒にいくつかの合理的でTimeoutStartSec
価値。