Upstartスクリプトをデバッグするにはどうすればよいですか?


67

何らかの理由で、apportのアップグレード中にエラーが発生します。その原因は

% sudo service apport start
start: Job failed to start

sysvinitの下では、たとえば

sudo sh -x /etc/init.d/whatever start

しかし、それはUpstartに対応していないようです。次に何を試してみますか?

それは判明回避策はあり続行インストールできるようになります。しかし、スクリプトをどのようにトレースするかという一般的な質問にはまだ興味があります。


1
私はより徹底的な返信に取り組んでいますが、回避策へのリンクのおかげで、今日私が同じことをしたのはnattyを更新したことです!
マークラッセル

ハハ、そして彼らは12分前に修正をリリースしました。ベータ版を実行していないのですか?(本当にない!)
マークラッセル

+ Muhammadは以下の正しい答えを投稿しました。
トラビスリーダー14

で役立つデバッグ情報を見つけました/var/log/syslog
マット

回答:


29

以下のすべての情報(および非常に役立つUpstartヘルプ)は、The Upstart Cookbookからのものです。セクション18では、デバッグについて説明します。 http://upstart.ubuntu.com/cookbook/#debugging

Upstartジョブの「スクリプト」スタンザをトレースするこの特定のケースでは、「スクリプト」という語のすぐ下に次の行を追加する必要があります。

exec 2>>/dev/.initramfs/myjob.log
set -x

奇妙な場所の理由は、ルートファイルシステムがロードされる前の非常に早いブートで/dev/.initramfs/が利用可能であり、ブート後も引き続き利用可能であるためです。私はapportで推測していますが、おそらくそのパスを使用する必要ありません。それでも、オプションを知ってうれしいです。

また、すべてのスクリプトが実行されるset -eため、失敗したコマンドはすべてスクリプトを終了することに注意してください。rootとしてスクリプトを実行するときは非常に注意する必要があるため、これは理にかなっています。

Upstartジョブで作業する人は、一般に上記リンクのUpstart Cookbookを参照することを強くお勧めします。


そのおかげで、バグが解決されるのを見ていなかったなら、おそらくset -xあなたが提案するようにスクリプトを修正してオンにするでしょう。私はそれを行うためのよりクリーンな方法があるかどうか主に疑問に思っていました。
-poolie

ええ、私が知っていることではありません(それが料理の本にない場合は、おそらくないことを意味します)。そのアイデアとは別に、言及されているデバッグ手法のほとんどは、UpstartおよびUpstartイベント自体のトラブルシューティングに関するものであり、通常は自分自身を見つけます。:)
マークラッセル

そして、まだこの方法は、次の場合に失敗しますsetuidと、setgidジョブで使用されています。
0xC0000022L

/dev/.initramfsは常に存在するとは限りません。このパスを持たないマシンに出会ったばかりです。
セージボルシュ

110

Upstartは、と同じ名前でサービスの実行をログファイルに記録します/var/log/upstart/your-service-name.log。役立つはずです。


2
右、これにはジョブの標準エラーが含まれているように見えるので、オンにset -xするとおそらくそこに表示されます。
プーリー

1
/etc/init.d/Xserviceスクリプトにエコーベースのログステートメントを入力しましたが、この場所には表示されません!OS:Ubuntu 14.04 Trusty
チャンプ

syslogを使用しない理由 一般的な機能、おそらくrsyslog自体、upstartやコンポーネントが使用できない場合はsyslogへの書き込み、またはsyslog asapに転送される一時的な場所への書き込みを使用することをお勧めします。これを見つけるのに半日かかりました。この発言TIAを転送してください。
パポー

4
これは少なくとも16.10以降、16.04には当てはまらないようです。そのディレクトリ内の最後のファイルは、15.10リリースの直前から日付が付けられています。
FGM

1
@FGMこれは、16.04がupstartを使用せず、systemdを使用するためです。ログはでアクセスされているjournalctl
ジェレミー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.