「ワンショット」サービスが最初に失敗したときに再試行するようにするにはどうすればよいですか?

「ワンショット」サービスが最初に失敗したときに再試行するようにするにはどうすればよいですか?

systemdサービスマニュアルを何度も読みましたが、まだデフォルトのsystemdモードを把握できません。

起動時に起動プロセス(Dockerコンテナやドライブフォーマットなど)を一度実行し、正常に完了したいと思います。ただし、これにType = oneshotを使用するとRestart = on-failureは使用できず、失敗した場合は操作を再試行しません。ここで明らかなものを見逃していますか?

また、Restart = on-failureを使用してType = simpleを設定しようとしましたが、多くの場合、マンページのワンショットサービスが提供する次の動作が必要です。

oneshotは単に動作しますが、systemdが後続のユニットを起動する前にプロセスを終了する必要があります。

修正する:

ベストアンサー1

私が試している1つの可能な回避策は次のとおりです。

  [Unit]
    Description=Tags instance and EBS vols
    After=docker.service
    Requires=docker.service

    [Service]
    ExecStartPre=/usr/bin/docker run --rm -v /opt/tag.sh:/tag.sh -v /opt:/ack --entrypoint=/bin/sh alpine /tag.sh
    ExecStartPre=/usr/bin/sh -c '[[ -e /opt/TAG_SUCCESS ]]'
    ExecStart=/usr/bin/rm /opt/TAG_SUCCESS
    Restart=on-failure
    RestartSec=30

スクリプトの実行が終了する場所ですtag.shtouch /ack/TAG_SUCCESS私はこれが望む動作に非常に近いと思います。ExecStartPre実行は順番に行われ、呼び出す前に成功した完了を待ちExecStart、ユニットはStarting一度だけ考慮されExecStart、この時点で私たちは開始タスクを完了したと確信しています。

しかし、それでも巨大なハッキングのように感じますか?

おすすめ記事