我有一个 cron 作业运行一个脚本,大约需要 6 小时才能完成。问题是 cron 没有将该作业的输出发送给我,而我希望它能这样做。
我在 /etc/crontab 中有它,它是这样的:
0 * * * * myuser /usr/local/bin/my-script
是的,这个脚本每小时运行一次,但是脚本中有一个锁文件,因此如果前一次运行没有完成,新一次脚本运行将立即退出而不执行任何操作。
系统是Debian 5.0‘lenny’,MTA是Postfix。
如果作业在运行初期被终止(使用“kill $PID”),那么我会收到一封包含作业输出的电子邮件。此外,如果我修改脚本以减少 10 倍的工作量,那么我也会收到一封电子邮件。只有当脚本运行了几个小时后,我才不会收到电子邮件。
ps afx
cron 作业启动后不久的相关行:
8222 ? Ss 0:04 /usr/sbin/cron
13265 ? S 0:00 \_ /USR/SBIN/CRON
13297 ? Ss 0:00 \_ /bin/bash /usr/local/bin/my-script
13395 ? S 0:16 | \_ /usr/bin/python /usr/local/bin/some-script.py
17065 ? S 0:00 \_ /usr/sbin/sendmail -i -FCronDaemon -oem myuser
17066 ? S 0:00 \_ /usr/sbin/postdrop -r
因此,似乎在 cron 作业启动时就已经调用了 MTA,而不是在它完成时调用。这与问题有关吗?Postfix 可能不喜欢postdrop
运行这么长时间,所以它会超时或发生其他情况吗?我该如何解决这个问题 - 我需要将输出通过电子邮件发送给我。
答案1
解决方法是:将输出重定向到文件并从 cron 脚本内部邮寄?
作为调试工具:从 cron 运行一系列脚本,这些脚本只打印日期、打印名称、预期睡眠时间长度、睡眠 n 分钟、打印日期,然后退出。我会同时运行它们,以便在 7 小时内得到答案。如果您测试从 1 小时到 7 小时的睡眠时间,比如说,以 10 分钟为增量,您就会知道这是一般的超时问题,还是仅与您的脚本有关。