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

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

私は Linux を実行している組み込み ARM デバイスを持っており、起動時にアプリケーションを起動します。このアプリケーションには、"printf(...)"表示する必要があるステートメントが多数含まれています。私が通常行っている方法は、組み込みデバイスの起動後に SSH (ホスト PC から) 経由で実行中のアプリケーションを強制終了し、SSH ターミナル経由で再起動して、ホスト PC のコンソールで印刷ステートメントを確認することです。この方法の問題は、アプリケーションを強制終了して再起動すると、アプリケーションが正常に動作しないことです。

私が試みたのは、起動スクリプトを編集して次のように表示"(nohup ./myAppName 2>&1 | logger) &"することです。ただし、何もログに記録されません。/var/log/syslogtail -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

関連情報