初期化スクリプトは実行時に常に正しい終了コードを返しますか?

初期化スクリプトは実行時に常に正しい終了コードを返しますか?

私のサービスが実行されていることを確認し、そうでない場合は再起動するクローンジョブスクリプトを作成しようとしています。したがって、これを手動で実行する必要はありません。

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

そうですね。合法的にアプリケーションはこのように動作すると予想できます。

関連情報