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