編集できない外部プログラムがあります。ログをファイルに書き込みます。
プログラムがログファイルに書き込むときに各行にタイムスタンプを追加するにはどうすればよいですか?
出力を標準出力に記録しません。タイムスタンプには最小秒を含める必要があります。パイプ、bash、cronなどの標準のLinuxツールを使用する方が良いです。
いくつかのサンプルスクリプトをテストした後、プログラムはログファイルを閉じて設定を再読み込みしてから、同じファイルを通常の空のテキストファイルとして再生成することを発見しました。これは、ファイルの内容の継続的な再検査などの他の方法を使用する必要があることを意味すると思います。
ベストアンサー1
fifo
1つを作成し、ここにログを記録するようにプログラムを設定できますか?
その場合は、FIFOを作成し、ここからデータを読み取り、ログファイルに書き込む単純なシェルスクリプトを作成し、タイムスタンプを追加します。それは次のとおりです。
#!/bin/sh
FIFOFILE=/tmp/program_log.fifo
LOGFILE=/var/log/program.log
mkfifo $FIFOFILE
awk '{printf("%s - %s\n", systime(), $0);}' < $FIFOFILE > $LOGFILE
セカンドバージョン
プログラムが定期的にログローテーションを実行してfifoを削除する場合は、別の方法を使用する必要があります。
tail
プログラムログファイルを使用して監視できます。テールチェックに注意してください定期的にファイルなので(運が悪い場合)、一部のログ行が失われる可能性があります。
#!/bin/sh
PROGRAMLOGFILE=/tmp/program.log
MARKEDLOGFILE=/var/log/program.log
tail -F $PROGRAMLOGFILE \
| awk '{printf("%s - %s\n", systime(), $0);}' \
> $MARKEDLOGFILE