stderr(ファイル名ではなくログファイル内)に日付を追加するにはどうすればよいですか?

stderr(ファイル名ではなくログファイル内)に日付を追加するにはどうすればよいですか?

アイテムがありますcrontab
00 10 * * * test.sh>>output_log 2>>error_log

しかし、私も毎日の開始行に日付を含めたいと思いますoutput_logerror_log

この目標をどのように達成できますか?

私は試した:

{ echo `date` && . test.sh; }>>output_log 2>>error_log

echo dateただし、日付は考慮されていないため、output_logにのみ含まれstderrます2

私は次の擬似コードが欲しい:

{ echo `date` && . test.sh }>>output_log { echo `date` plus 2's content } >>error_log  

答え1

最も簡単:

0 10 * * * { date; date >&2; test.sh; } >> output_log 2>> error_log

ts各行の前にタイムスタンプを追加するMoreutilsのユーティリティを使用することも興味深いかもしれません。

SHELL=/bin/bash
0 10 * * * test.sh > >(ts >> output_log) 2> >(ts >> error_log)

/bin/bash(デフォルトのPOSIXはリダイレクト設定を/bin/shサポートしていないため、この使い方に注意してください。)>()

答え2

私の考えでは、次のようにパスを変更すると、crontab欲しいものが得られます。または、少なくとも私が欲しいものを手に入れることができます。考えるあなたが欲しい。意図しない場合はコメントを残してください。目標を明確にするために質問を編集することもできます。

crontabテスト/評価のためのプロトタイプ項目:

* * * * * { cat hellofile_NOFILE.txt ; echo $(date) | tee -a error_log; } >> /home/pi/output_log 2>>/home/pi/error_log

私はあなたのスクリプトがないのでtest.shそれを使用しましたcat file。でエラーを生成するには、cat存在しないファイルを指すだけです。いくつかの出力を送信して、そのファイルがstderrそのファイルに移動していることを確認してくださいerror_log

error_log合計に日付タイムスタンプが必要ですoutput_log。配達date先はtee -a error_logエラーログにタイムスタンプを記録する必要があります。

(またはあなたの場合は)不可能であっても日付タイムスタンプが欲しいと思ったので&&交換しました。;cattest.sh

私はこれがあなたの質問と正確に一致しないことを知っています。私はあなたがロジックをテストできるようにこれを取得します。ロジックが正しい場合は、次のようにあなたのケースで「翻訳」されると思います。

修正されたcrontabアイテム:

00 10 * * * { test.sh ; echo $(date) | tee -a error_log; } >> output_log 2>> error_log

関連情報