web-dev-qa-db-ja.com

アップスタートジョブをデバッグするにはどうすればよいですか?

/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スクリプトを呼び出すだけでこれを試しましたが、それでも機能しません。私は何か間違ったことをしていると思います。どうなり得るか?

10
Cera

exec >FILE 2>&1と組み合わせてstdoutプラグマ(stderrの代わりに)を使用して、シェル全体のscriptexecをリダイレクトできます。 :

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

うまくいけば、何が起こっているのかについてのより良い洞察が得られるはずです。これは、起動スクリプトのあらゆる種類の問題をキャッチするのに役立つことがわかりました。あなたはcouldコマンドのstdout/stderrを直接パイプしますが、シェルで発生するエラー(構文エラーなど)を見逃します。

一方、serviceがハングしている場合は、スクリプトにヒットすることすらありません可能性がありますこの場合、もちろん、これは役に立ちません。

14
Charles

ここで定義されているように、console log宣言もあります。 http://upstart.ubuntu.com/cookbook/#console-log

Upstartについてデフォルトで有効になっているかどうかを知るには十分な知識がありませんが、upstartジョブごとに有効にできます。デフォルトでは/var/log/upstart/<job>.log

2

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

0
zachlaniado