web-dev-qa-db-ja.com

OS Xでlaunchdロギングをアクティブにするにはどうすればよいですか?

OS X 10.6でlaunchdロギングをアクティブにするにはどうすればよいですか?

正常に起動しない新しいデーモンを追加しました(ステータスは1)。

問題をデバッグしたいのですが、launchdログが見つかりませんでした。/var/log/launchd.logにはありません。

38
sorin

解決策を見つけた

 Sudo launchctl log level debug 

そしてこの後

 tail -f /var/log/system.log
27
sorin

Launchd plistファイルに次の行を含めると、launchd自体ではなくプロセスをログに記録しようとしていると想定します。

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>

そしてプロセスをリロードすると、スクリプトの内部にあるロギングまたは印刷は、実行されるたびにこれら2つのファイルのいずれかにキャプチャされます。ただし、ファイルのローテーションはあなた次第です。ご想像のとおり、両方のインスタンスで同じファイルを使用すると、エラーとstdoutの両方が同じ場所に記録されます。

参照: 起動デーモンとエージェントの作成のlaunchdジョブセクションのデバッグ

25
peter

OS X 10.11(El Capitan)では、@ peterによって提案されたファイルシステムオプションを使用したくない場合は、Sudo launchctl debug <service-target> --stdout --stderrを使用して1回限りのロギングを有効にできます。

launchctlの現在の実装では多くのものは異なり、<service-target>は奇妙なものです。たとえば、私が~/Library/LaunchAgents/dev.localmon.plistで構成するローカルサービスがあり、「ラベル」dev.localmonがあるとします。その<service-target>gui/$UID/dev.localmonです。ここで、$UIDはユーザーIDです。これは、CLIでこれを実行しているため、シェルが補間します。

ですから、私のdev.localmonサービスが起動時にクラッシュしたとしたら(そうでした)、次のように呼び出して、launchctlにプロセスのstdoutとstderrを次回(そして次回のみ)シェルにパイプ接続させることができます。サービスが開始します:

Sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr

オープンアンドレディのTTYでハングアップするため、別のターミナルに移動して次のコマンドを実行します。

launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation

次に、最初のターミナルに戻りますすべき出力を確認します。 (奇妙なことに、サービスプロセスが終了しても閉じないため、Ctrl-Cを押す必要があります。)

ところで、以前にサービスを壊していたPATHまたは環境で構成ファイルを修正したら、ドキュメントのuncacheサブコマンドが次の効果を持っているため、古いlaunchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistの2ステップを使用する必要があります。

コマンドはまだ実装されていません。

Appleのジョブ後のリリース戦略に賛成:「速く動き、物事を壊す」

19
chbrown