【问题标题】:Cron Terminates Python Script?Cron 终止 Python 脚本?
【发布时间】:2011-05-28 08:41:59
【问题描述】:

我有一个“长”的 python 脚本,运行大约需要 45[分钟]。我使用另一个(“调度程序”脚本)python 脚本来运行这个长脚本。当我使用终端运行“调度程序”脚本时,一切正常(意思是,“长”脚本运行没有任何问题)。

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

这就是问题所在:每当一个脚本(由“调度程序”“运行”)有一行显示:

print "hello"

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

我想解决这种情况,让脚本继续运行,即使它们中有一些“打印”语句。有什么提示吗?

附:在“调度程序”中,我使用

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

“运行”所有其他 python 脚本。

【问题讨论】:

    标签: python linux cron subprocess popen


    【解决方案1】:

    我有一种预感,这是由于cron 处理标准输出的方式。你如何重定向输出?

    来自http://aplawrence.com/BDD/bbcronbasics.html

    输出

    通常任何程序的输出都是 发送到 STDOUT(标准输出)和 通常会出现在某人的显示器上 屏幕。对于由 cron 启动的作业, STDOUT 将被定向到本地 邮件子系统,这意味着任何输出 由 cron 作业生成的将被邮寄 给拥有该工作的用户。如果这 不可取,您应该采取措施 将您的 cron 作业的输出重定向到 一份文件。也建议你 将 STDERR(标准错误)重定向到 文件以便能够分析任何 cron 作业中的异常 执行。

    【讨论】:

    • 谢谢。我不确定目前如何指导输出。有任何想法吗?另外,我从来没有收到来自 cron 的邮件。我需要定义什么设置吗?
    • 邮件是指每个 *nix 用户在他们自己的系统上拥有的本地邮件系统。要将输出重定向到文件,可以使用 > 重定向运算符:python scheduler.py > output.log
    • 谢谢 Aphex。所以现在我知道如何将输出定向到文件。我确实在 Evolution 中设置了一个电子邮件帐户(我使用的是 Ubuntu 10.04),但从未收到来自 Cron 的电子邮件。我该如何解决?
    • 检查/etc/crontab 中的MAILTO 字段。默认情况下,它会将内容邮寄到root
    • 谢谢。顺便说一句,当我将脚本定向到输出时,我的 cron 不起作用(它确实从终端工作)。这是我指导它的方式: subprocess.Popen([sys.executable, "script.py > log.log"])
    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2019-04-13
    相关资源
    最近更新 更多