web-dev-qa-db-ja.com

起動後にスクリプトを実行する

わかりました。それで、Debianボックスで正常に動作するサービス(nagios)があります。ただし、ボックスが再起動された後にのみ発生する非常に特定の問題が1つあります。この問題は、サービスを手動で再開することで簡単に修正できます。問題自体は非常に具体的であり、混乱させるほど難解なので、実行する時間がありません(500+の1回のチェックアウトでバグが返されますが、nagiosによって実行されている場合に限られます)。

次善の策は、起動時にサービス自体を再起動することです。そのため、毎回手動で行う必要はありません。これまでのところ、私はこれを次のようにして達成しようとしました:

「/etc/init.d/nagios restart」を/etc/rc.localに追加すると、これはログを見てから実行されますが、問題は修正されません(まだ手動で行う必要があります)

Nagiosを開始するタイミングを最後まで移動(update-rc.d nagiosのデフォルトは99 10)

Rc.localの修正に戻り、今回は「sleep 20」行を追加しました。これにより、ボックスの開始が20秒遅れるだけです。

他に試してみる/見ることができるものはありますか?

5
Will Bates

遅延させたいinitスクリプトに次のようなコメントブロックがあるかどうかを確認します。

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

このブロックは、Debianの LSBInitScripts wikiで述べられているように、nagiosスクリプトを実行する前に開始する必要のある他の機能があることをinitサブシステムに伝えます。

次に、nagios initスクリプトを再起動する必要がある理由を指摘するだけです。これは、まだネットワークが稼働していないためです。それはウェブサーバーがまだ起動しているからですか?または、まだ同期していないnfs?

毎回nagiosを再起動する必要がある理由を見つけるのはあなた次第ですが、このアプローチはあなたのケースにとって最もエレガントなソリューションです。

2
Marcel

再起動を手動で行う必要がある場合、チェックは、ログイン時に設定されるいくつかの変数に依存する可能性があります。

手動で実行しているかどうかを確認するservice nagios restartまた、問題を修正するか、または/etc/init.d/nagios restart

# Required-Start:    $all

スクリプトを開始する前に、他のすべてのサービスが確実に開始されるようにする方法です。しかし、私はrc.localはとにかくすべてのサービスが開始された後に実行されているため、役に立ちません。

1