実行中に何百万もの行をコンソールにダンプするプロセスがあります。これを cron ジョブで実行したいのですが、数 MB のメールを送信しないようにするために、成功 (exit == 0) の場合は出力を 0 行に制限し、エラー (exit != 0) 最後の 20 行まで。
少しの努力でこれを達成するためのアイデアはありますか? たぶん、数行の perl か、標準ツールのスマートな使用でしょうか?
crontab で直接、またはラッパー スクリプトで、出力を末尾にパイプするだけです。例えば
10 * * * * myprogram 2>&1 | tail -20
これは、成功したかどうかにかかわらず、常に最後の 20 行を出力します。成功時の出力とエラー時の出力が必要な場合は、cron から呼び出すラッパー スクリプトを作成できます。
#!/bin/sh
myprogram 2>&1 | tail -20 >/tmp/myprogram.log
if [ $? != 0 ] ; then
echo "Failed!"
cat /tmp/myprogram.log
fi
rm /tmp/myprogram.log