パラメータなしでアプリケーションを起動し、競合時にパラメータを使用して再起動するには、systemdユニットサービスが必要です。
私はいくつかのアプリを書いたがうまくいった。ただし、不明なため、競合が発生した場合は詳細情報表示モードで再起動し、ログファイルにさらに多くの情報があるようにします。
私はRaspbian / Linux 9(strech)とSystemd 232-25 + deb9u2を使用してRaspberry Piで実行しています。
[Unit]
Description=Example Application
PartOf=app.service
After=app.service
[Service]
ExecStart=/home/pi/exampleApp
ExecRestart=/home/pi/exampleApp -V
Restart=always
[Install]
WantedBy=app.service
サービスを開始してアプリケーションを再起動しました。他のサービスへの依存関係から始めることも可能です。ただし、アプリケーションの再起動時にパラメータで始まるソリューションは見つかりません。
クラッシュ/不純なシャットダウン後にパラメータを使用してアプリケーションを起動する方法についてのアイデアはありますか?
答え1
単純な解決策があるかどうかはわかりません(したがって、デフォルトでは、詳細情報表示モードでアプリケーションを起動することを検討する価値があるかもしれません)。
あなたが望むものの少なくとも一部を達成する提案は次のとおりです。ExecStart=
アプリケーションが正常に実行されると、以下に示すサービスユニットはアプリケーションを通常モード()で起動します。何らかの理由でアプリケーションが起動しない場合、ExecStopPost=
サービスは2回目の試行()で詳細情報表示モードで実行されます。
[Unit]
Description=verbose-start-on-failure Service
After=app.service
[Service]
RemainAfterExit=yes
ExecStart=/home/pi/exampleApp
ExecStopPost=/home/pi/exampleApp -V
[Install]
WantedBy=app.service
ただし、アプリケーションが正常に起動しても後で何らかの理由で競合が発生した場合、このサービスユニットはアプリケーションを自動的に再起動しません(依存関係を追加してもPartOf=
効果はありません)。