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


10

私は次の仕事をしています/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

twistdpsにデーモンのインスタンスが表示されず、デーモンが提供するはずのHTTPサーバーが存在しません。

「expectデーモン」を使わずに、scriptスタンザを使用して1行のbashスクリプトを呼び出すだけでも、これを試しましたが、それでも機能しません。私は何か間違ったことをしていると思います。どうなり得るか?


答えはありませんが、同様の問題で苦労しています。それはUpstartのバグである可能性もあります:bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313このハングした状態から他の方法で取得してから再起動する方法がわかりません。また、それはexpect daemon行と関係があると思います。
2012

回答:


14

あなたは、リダイレクトすることができますstdoutし、stderr使用してシェル全体のscriptプラグマ(の代わりexecと一緒に)をexec >FILE 2>&1そのように、:

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

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

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


おかげで、これは私を正しい軌道に乗せました。結局、出力をにパイプで送ったloggerので、テールすることができました/var/log/syslog
Cera

さらに、confファイル自体のエラーがに表示されdmesgます。上記を使用したときに出力が得られなかった後、これを見つけました。私はchdirディレクティブにタイプミスをしました。
codingFoo

あなたはそのコードをどこに置きますか?
kev 09/07/17


0

upstartディレクターが存在することを確認し、スクリプトフェーズの前にコンソールログを追加します。(upstartバージョンでは1.4以上がデフォルトです)

コンソールログ

スクリプトexec> / path / to / some_log_file 2>&1 exec your_command_here終了スクリプト

詳細については、スレッドを確認してください:https : //askubuntu.com/questions/207143/how-to-diagnose-upstart-errors/932155#932155

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.