/etc/init/collector
で次の仕事をしています。
start on runlevel [2345]
stop on runlevel [!2345]
expect daemon
exec /usr/bin/twistd -y /path/to/my/tac/file
Sudo service collector start
でジョブを開始すると、ハングします。 ctrl-c
を実行してinitctl list
を実行すると、次のように表示されます。
collector start/killed, process 616
Psにtwistd
デーモンのインスタンスが表示されず、提供されるはずのHTTPサーバーが存在しません。
'expectデーモン'なしで、script
スタンザを使用して1行のbashスクリプトを呼び出すだけでこれを試しましたが、それでも機能しません。私は何か間違ったことをしていると思います。どうなり得るか?
exec >FILE 2>&1
と組み合わせてstdout
プラグマ(stderr
の代わりに)を使用して、シェル全体のscript
とexec
をリダイレクトできます。 :
script
exec >/path/to/some_log_file 2>&1
exec your_command_here
end script
うまくいけば、何が起こっているのかについてのより良い洞察が得られるはずです。これは、起動スクリプトのあらゆる種類の問題をキャッチするのに役立つことがわかりました。あなたはcouldコマンドのstdout
/stderr
を直接パイプしますが、シェルで発生するエラー(構文エラーなど)を見逃します。
一方、service
がハングしている場合は、スクリプトにヒットすることすらありません可能性がありますこの場合、もちろん、これは役に立ちません。
ここで定義されているように、console log
宣言もあります。 http://upstart.ubuntu.com/cookbook/#console-log
Upstartについてデフォルトで有効になっているかどうかを知るには十分な知識がありませんが、upstartジョブごとに有効にできます。デフォルトでは/var/log/upstart/<job>.log
Upstartディレクターが存在することを確認し、スクリプトフェーズの前にコンソールログを追加します。 (1.4より上のアップスタートバージョンでは、それがデフォルトです)
コンソールログ
script exec>/path/to/some_log_file 2>&1 exec your_command_here end script
詳細については、スレッドを確認してください: https://askubuntu.com/questions/207143/how-to-diagnose-upstart-errors/932155#932155