【问题标题】:Crontab and Python prog not running completelyCrontab 和 Python 程序未完全运行
【发布时间】:2016-07-22 05:14:09
【问题描述】:

我正在尝试使用 crontab 让 Python 脚本每小时运行一次,但我似乎无法让它工作。

如果我从终端手动运行,Python 程序运行良好并完成。

$ python /home/pi/Documents/Project/Base_Prog.py

我的 crontab 是这样设置的:

# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h  dom mon dow   command

@reboot /usr/bin/python /home/pi/Documents/Project/Base_Prog.py

0 * * * * /usr/bin/python /home/pi/Documents/Project/Base_Prog.py

0 * * * * /usr/bin/python /home/pi/Documents/SimpleCronTest.py

让我澄清一下,我遵循了建议 on this similar post. 我尝试了创建输出文件的简单测试脚本并且有效。但是在具有相同设置的相同 crontab 下,我的程序没有完成。

有趣的一点是,当脚本即将启动时使用 TOP,Python 窗口会短暂弹出,然后再次消失。所以我认为 cron 至少可以正常工作。

我已添加:

#!/usr/bin/env

Base_Prog.py 文件顶部的 Python 行。 我的 Python 程序是一个 API 抓取工具,它从一个文件中查找其输入并将结果写入另一个文件,项目目录中的所有文件都具有使用 chmod 777 的完全写入权限。

我不知道是什么原因造成的。

更新

简单测试和我的程序在 syslog 中的输出日志是:

Apr  2 14:29:01 raspberrypi CRON[1455]: (pi) CMD (python /home/pi/Documents/Project/Base_Prog.py)
Apr  2 14:29:01 raspberrypi CRON[1456]: (pi) CMD (python /home/pi/Documents/CronTest.py)

【问题讨论】:

  • 你的脚本做了什么样的工作?
  • 把你的脚本代码放在这里

标签: python cron crontab


【解决方案1】:

我认为完整的解决方案是:

首先在你的 python 脚本顶部添加一个 SHEBANG 行:

#!/usr/bin/env python

使用 chmod +x 使您的脚本可执行

如果您的脚本使用标准输出,或者您需要知道哪里出了问题:

0 * * * * /usr/bin/python /home/pi/Documents/Project/Base_Prog.py >> tmp.log

只是为了澄清:

0 * * * * -means the cron will run always when the minutes are 0 (hourly)

【讨论】:

  • 我在使用和不使用 SHEBANG 线的情况下进行了测试。程序本身和目录中的所有文件都具有 chmod 777、读写和可执行的所有必要权限。我添加了 >> tmp.log 但在它应该运行后我在目录中找不到任何输出。请注意,我将时间更改为从我测试时开始的几分钟后,如果这就是最后一行的意思,我不会每次都等待一个小时。
【解决方案2】:

您需要查看 cron 执行的输出以获取任何线索,而不仅仅是从终端运行它。也许有一些许可/所有权错误或类似的东西。从 cron 执行中,您可以将输出发送到文件以查看:

 0 * * * * python /home/pi/Documents/Project/Base_Prog.py 1> /dev/null 2> /home/pi/Documents/Project/Base_Prog.err

你可以查看/home/pi/Documents/Project/Base_Prog.err之后的线索。或者您也可以通过电子邮件将其发送给您:

0 * * * * python /home/pi/Documents/Project/Base_Prog.py 1> /dev/null 2>&1 | mail -s "Base Program Output" you@company.com

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多