systemdサービスファイル:タイプ=ワンショットサービスは再起動できません=失敗しました。

systemdサービスファイル:タイプ=ワンショットサービスは再起動できません=失敗しました。

成功するまで再試行する必要がある2つのrsyncコマンドを順番に実行するためのsystemdサービスファイルを作成しました。時々 rsync サーバーがダウンすることがあります。 Systemdは、Type = oneshotサービスがRestart = on-failureを許可しないことを伝えます。どのような種類のサービスを利用できますか?

[Unit]
Description=Sync

[Service]
Type=oneshot
Restart=on-failure
ExecStart=/usr/bin/rsync -atvzq --no-owner --no-group --delete rsync://(some address) /srv/www/
ExecStart=/usr/bin/rsync -atvzq --no-owner --no-group --delete rsync://(some address) /srv/www1/

ベストアンサー1

私はあなたがType=oneshotこれを使っていくつかのコマンドを持つことができると仮定しますExecStart=。その他には、Type=oneshot活性化成功後に実行されるサービスがないようで、使用していないので使用する理由がありません。RemainAfterExit=true

代わりに使用しType=simpleて使用してください。ExecStartPre=

[Service]
Type=simple
Restart=on-failure
ExecStartPre=/usr/bin/rsync -atvzq --no-owner --no-group --delete rsync://(some address) /srv/www/
ExecStart=/usr/bin/rsync -atvzq --no-owner --no-group --delete rsync://(some address) /srv/www1/

次のことが起こります。

  1. ExecStartPre=コマンドの前に実行されますExecStart=
  2. 実行中、ExecStartPre=デバイスは「アクティブ」になります。
  3. ExecStartPre=失敗するとExecStart=実行されず、デバイスは「失敗」と見なされ、再起動されます。
  4. 実行中、ExecStart=デバイスは「アクティブ」になります。
  5. 完了すると、ExecStart=すべてが成功するとデバイスは「非アクティブ(死)」状態になり、コマンドが失敗すると「失敗」状態になります。

ExecStartPre=失敗を無視してExecStart=強制するには、ゼロ以外の終了コードを無視するようにExecStartPre=コマンドの前に付けます。-

おすすめ記事