BASH/Linux: 常にコマンドを開始または再試行しますか?

BASH/Linux: 常にコマンドを開始または再試行しますか?

docker-compose up私の特定のユースケースでは、複数のアプリケーションに再試行ロジックを提供したいと思います。

ギアを変更して使いやすいCDNインフラストラクチャに移動するときは、シェルコマンドを実行して単一のDockerコンテナからすべてを起動する方が簡単に見えます。

ただし、「常に動作」ロジックに対応する唯一のものは次のとおりです。

while true; do start-app || sleep 1; done

このシステムレベルの操作の便利な機能に加えて、実際にコマンドを常に実行できるようにするUnix / BASHの「再試行」ツールがあるかどうか疑問に思います。

答え1

システムをご利用いただけます。

たとえば、ファイルを生成します。/etc/systemd/system/yourapplication.service

[Unit]
Description=Your Super application
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s

ExecStart=/path/to/application

[Install]
WantedBy=multi-user.target

あるいは、以前の方法はinitを使用してアプリケーションを起動することです。

初期化スクリプトに1行追加

ap:2345:respawn:/bin/sh /somewhere/start-app

apサービスID(最大2文字)

2345このエントリが適用される実行レベルを一覧表示します。

  • 2 マルチユーザーモードは、ネットワークインタフェースを設定したりデーモンを起動したりしません。
  • 3. ネットワークを使用してマルチユーザーモードでシステムを正常に起動します。
  • 4未定義未使用/カスタマイズ可能
  • ランレベル3 +ディスプレイマネージャ(X)である5 X11

respawn行動のために

その後、コマンドを実行します。

関連情報