我有一个进程在运行时将数百万行转储到控制台。我想在 cronjob 中运行它,但为了避免发送多 MB 邮件,我想在成功(退出 == 0)的情况下将输出限制为 0 行,并在出现错误的情况下(退出!= 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