我有一个进程在运行时将数百万行转储到控制台。我想在cronjob中运行它,但为了避免发送多MB邮件,我想在成功(退出== 0)的情况下将输出限制为0行并且在出现错误的情况下(退出) != 0)到最后20行。
任何想法都可以轻松实现这一目标吗?也许是几行perl或智能使用标准工具?
答案 0 :(得分:2)
tail command是否适合您要做的事情?也许如果控制台输出也可以在文件中使用(可能使用tee)?
答案 1 :(得分:2)
直接在crontab或包装器脚本中将输出管道输出到tail。 e.g。
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