私は Linux を実行している組み込み ARM デバイスを持っており、起動時にアプリケーションを起動します。このアプリケーションには、"printf(...)"
表示する必要があるステートメントが多数含まれています。私が通常行っている方法は、組み込みデバイスの起動後に SSH (ホスト PC から) 経由で実行中のアプリケーションを強制終了し、SSH ターミナル経由で再起動して、ホスト PC のコンソールで印刷ステートメントを確認することです。この方法の問題は、アプリケーションを強制終了して再起動すると、アプリケーションが正常に動作しないことです。
私が試みたのは、起動スクリプトを編集して次のように表示"(nohup ./myAppName 2>&1 | logger) &"
することです。ただし、何もログに記録されません。/var/log/syslog
tail -f
"(nohup echo "test123" 2>&1 | logger) &"
実際に syslog に正しくログが記録されることを確認しました。
どこが間違っているのでしょうか? アプリが stdout/stderr に出力していない可能性はありますか? アプリを再起動すると、コンソールに正しく出力されますが、前述したように、再起動すると、これの範囲外の他の部分が壊れてしまいます。
答え1
一部のプログラムは、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