0

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

有什么想法可以轻松实现这一目标吗?也许是几行 perl 或标准工具的巧妙使用?

4

2 回答 2

2

tail 命令是否适合您要执行的操作?也许如果控制台输出在文件中也可用(也许使用tee)?

于 2009-08-19T14:02:40.960 回答
2

直接在 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 
于 2009-08-19T14:11:19.093 回答