web-dev-qa-db-ja.com

アプリケーション出力をログファイルにリダイレクトするのに問題がある

Linuxを実行している組み込みのARMデバイスで、起動時にアプリケーションを起動します。このアプリケーションには、表示する必要のある"printf(...)"ステートメントがたくさんあります。通常の方法ではこれに取り組んできたのは、起動後に組み込みデバイスでSSHを介して(ホストPCから)実行中のアプリを強制終了し、SSHターミナルを介して再起動して、ホストのコンソールでprintステートメントを確認できるようにすることです。 PC。これに伴う問題は、アプリを強制終了して再起動した後、アプリが適切に動作しないことです。

私が試みたのは、起動スクリプトを編集して"(Nohup ./myAppName 2>&1 | logger) &"と言い、_/var/log/syslog_を_tail -f_で表示することです。しかし、何もログに記録されません。

"(Nohup echo "test123" 2>&1 | logger) &"が実際にsyslogに正しくログを記録することを確認しました。

どこがうまくいかないのでしょうか?アプリがstdout/stderrに印刷されていない可能性はありますか?アプリを再起動すると、コンソールに正しく印刷されますが、前述したように、そうすると、この範囲を超える他のことが壊れます。

Stdoutがttyでない場合、一部のプログラムは冗長性が低くなります。 screenを使用してttyをエミュレートできます。

screen -L -d -m ./myAppName

これは、出力を./screenlog.0のようなものに記録します。現在のディレクトリへの書き込み権限が必要です。

そうしないと、プログラムがブート環境内でのみサイレントに失敗する可能性もあります。

straceを使用してloggerを回避することをデバッグします:

strace -f -o /tmp/myApp.strace Nohup ./myAppName >/tmp/myApp.log 2>&1
1
rudimeier