Cron终止Python脚本?

4

我有一个“冗长的”Python脚本,大约需要45分钟才能运行。我使用另一个(“调度程序”脚本)Python脚本来运行这个长脚本。当我在终端上运行“调度程序”脚本时,一切都正常(也就是说,“长”脚本可以无问题地运行)。

我曾经遇到一些困难,但最终成功地将“调度程序”脚本添加到cron以便每分钟运行。现在它可以“运行”其他脚本并且工作正常。

问题在于:每当由“调度程序”运行的脚本中出现以下行时:

print "hello"

当有任何“print”语句时,cron作业会运行,但在20-30秒后终止。当我删除所有“print”语句时,cron正常运行作业并不会终止。

我想解决这个问题,并使脚本即使有一些“print”语句也能继续运行。有什么提示如何做到呢?

P.S. 在“scheduler”中,我使用

subprocess.Popen([sys.executable, command])

运行所有其他Python脚本。

1个回答

6
我有一种预感,这可能与处理标准输出的方式有关。你是如何重定向输出的?
来自http://aplawrence.com/BDD/bbcronbasics.html
输出
通常情况下,任何程序的输出都会发送到STDOUT(标准输出),并且通常会显示在某人的屏幕上。对于由cron启动的作业,STDOUT将被定向到本地邮件子系统,这意味着由cron作业生成的任何输出都将通过电子邮件发送给拥有该作业的用户。如果不希望这样做,您应该采取措施将cron作业的输出重定向到文件中。建议您还将STDERR(标准错误)重定向到文件中,以便能够分析cron作业执行中的任何异常情况。

邮件是指每个*nix用户在自己的系统上拥有的本地邮件系统。要将输出重定向到文件,您可以使用>重定向运算符:python scheduler.py > output.log - Aphex
请检查/etc/crontab中的MAILTO字段。默认情况下,它会将邮件发送给root - Aphex
顺便说一下,当我将脚本指向输出时,我的cron不起作用(从终端可以工作)。这是我如何指定它的:subprocess.Popen([sys.executable,“script.py > log.log”]) - user3262424
你需要将由cron执行的主“调度程序”脚本的输出进行管道传输。在crontab中的该行添加> logfile.log - Aphex
关于将脚本的输出(即“print”和“puts”语句)重定向到作为cron作业在“/etc/crontab”中执行的日志文件(或类似文件),已经有讨论(并附有答案)。请查看此链接:https://dev59.com/nUrSa4cB1Zd3GeqPZMZU - 9monkeys
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接