web-dev-qa-db-ja.com

CentOS 6以降

新しいCentOS 6には、initに代わるUpstartが付属しています。/etc/inittabファイルを新しいupstart形式に変換しようとしています。この特定のサーバーには15個程度のinittabエントリしかありませんが、他のサーバーには30を超えるエントリがあります。私たちは主にinittabとupstartの「respawn」部分を必要としています。しかし、私は見つけることができるすべてのupstartのドキュメント(Ubuntuに基づいており、明らかに古いバージョンのupstartに基づいています)をすべて読んでいて、どこにも行きませんでした。設定ファイルを作成できます(/etc/init/test.confという名前にします)。ファイルにはこれが含まれています(注、匿名化)

start on runlevel [345]
stop on starting shutdown

respawn
#Comment about what it does
exec su -c "/usr/bin/ssh -2CNL 11111:127.0.0.1:11111 10.10.1.1" username

initctl reload-configurationを発行すると、ジョブが認識されます。 initctl start testを呼び出すことで開始でき、ジョブが開始されます。

ただし、これは再起動では機能せず、手動でのみ機能します。起動コマンドを次のように変更してみましたが、すべてうまくいきませんでした

start on started

start on (local-filesystems and net-device-up IFACE!=lo)

start on net-device-up IFACE=eth0 

さまざまな例で言及されている他のダースの方法は約12あります。誰もスクリプトを開始しないようです。 (test.confは、このフォルダー内の他のすべてのファイルと同様に、rootと644が所有しています)

明白な何かが欠けていますか?

18
Brian

私は、将来問題を抱えている人々にとって、非常に、非常に、非常に役立つアップスタートスクリプトを見つけました。これを/ etc/init /に入れます

# /etc/init/debug.conf
start on ( starting JOB!=debug \
or started JOB!=debug \
or stopping JOB!=debug \
or stopped JOB!=debug )
script
exec 1>>/tmp/log.file
echo -n "$UPSTART_JOB/$UPSTART_INSTANCE ($0):$$:`date`:"
echo "Job $JOB/$INSTANCE $UPSTART_EVENTS. Environment was:"
env
echo
end script

このスクリプトは基本的に、開始または停止するすべてのジョブをログに記録します。 CentOS 6はランレベルについて何も「放出」​​しないことがわかりました。 (私が試した他の一般的なイベントのいくつかも。)デバッグジョブが/tmp/log.fileに作成するログファイルを調べると、非常に役立ちました。スクリプトの開始を次のように変更します:

start on runlevel [345]

start on started sshd

すべてのジョブが正しく起動しているように見えます。私が見つけたすべての例が前の構文を使用したので、これは後部の苦痛でした。

32
Brian

ネクロポスティングには申し訳ありませんが、私は以下を使用してこの問題を解決することができました:

start on stopped rc RUNLEVEL=[345]

「停止」はタイプミスではありません。rcはランレベルに入ると停止するようです。

15
Leonid99

これが、リスポーンの問題をデバッグするために私がしたこと(CentOS 6、Upstart 0.6.5)です。別のターミナルで、

Sudo initctl log-priority debug 
Sudo tail -F /var/log/messages
5
Mark Lakata