私のサービスが実行されていることを確認し、そうでない場合は再起動するクローンジョブスクリプトを作成しようとしています。したがって、これを手動で実行する必要はありません。
bashスクリプトでサービスの状態を確認する方法をオンラインで検索したところ、基本的にいくつかのバリエーションがあることがわかりました。
ps auxw | grep <service_name> | grep -v grep
if [[ $? != 0 ]]; then
/etc/init.d/<service_name> start
fi
私はいくつかの考えをしましたが、これはあまり面倒で、initスクリプトの一般的な機能を使用してこれを確認する方法になると思いました。
/etc/init.d/<service_name> status
if [[ $? != 0 ]]; then
/etc/init.d/<service_name> start
fi
私が間違っている場合は訂正してください。しかし、これはいつもうまくいきませんか?これはinitスクリプトの一般的な属性ですか?終了コードを返しますか?よろしくお願いします。 :)
答え1
100%ではありません。しかし、これは非常に良い対策です。
CFEngine 3はサービス予定でそれを使用して、サービスが実行されていることを確認します。終了コード/etc/init.d/<servicename> status
が0の場合、サービスは実行中と見なされます。
BitBucketがこの規則に従わない状況に直面しました。/etc/init.d/atlbitbucket status
実行していない場合でも0を返します。しかし、これはinitスクリプトの慣例に従わない誤った動作(バグ)と考えられます。
これへの参照が見つかりました。Linux標準の基本仕様状態:
ステータス操作が要求されると、初期化スクリプトは次の終了ステータスコードを返します。
0 program is running or service is OK 1 program is dead and /var/run pid file exists 2 program is dead and /var/lock lock file exists 3 program is not running 4 program or service status is unknown 5-99 reserved for future LSB use 100-149 reserved for distribution use 150-199 reserved for application use 200-254 reserved
そうですね。合法的にアプリケーションはこのように動作すると予想できます。