アイテムがありますcrontab
:
00 10 * * * test.sh>>output_log 2>>error_log
しかし、私も毎日の開始行に日付を含めたいと思いますoutput_log
。error_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
エラーログにタイムスタンプを記録する必要があります。
(またはあなたの場合は)不可能であっても日付タイムスタンプが欲しいと思ったので&&
交換しました。;
cat
test.sh
私はこれがあなたの質問と正確に一致しないことを知っています。私はあなたがロジックをテストできるようにこれを取得します。ロジックが正しい場合は、次のようにあなたのケースで「翻訳」されると思います。
修正されたcrontab
アイテム:
00 10 * * * { test.sh ; echo $(date) | tee -a error_log; } >> output_log 2>> error_log