【问题标题】:Executing a Python program from crontab从 crontab 执行 Python 程序
【发布时间】:2016-03-29 14:58:29
【问题描述】:

我在我的 Raspberry Pi 上创建了一个 Python 2.7.3 程序,用于编写 XML 文件。当我使用 IDLE 的 F5 键运行该程序时,它会运行并输出 XML 文件。当我使用 LXDE 终端在 pi@raspberry-pi ~ $ 提示符下键入 python program_name.py 运行相同的程序时,它也可以按预期工作并输出 XML 文件。

现在我想每 15 分钟刷新一次 XML 文件,听起来我应该可以使用 crontab 执行此操作。

所以我开始使用命令crontab -e 打开编辑器(在我的例子中是nano)。我在最后一行输入了以下内容:

*/15**** python /home/pi/program_name.py

我还尝试了以下各种变体:

*/15**** sudo python /home/pi/program_name.py

和:

*/15**** python program_name.py

当我退出程序时,我收到错误消息:

"/tmp/crontab.nyQZsu/crontab":23: bad command
errors in crontab file, can't install.

关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: python crontab


    【解决方案1】:

    crontab 文件中的小时、分钟、月份和其他字段以空格分隔。除非您有我以前从未见过的 cron 变体,否则将所有字段塞进一个像“****”这样的单个 blob 是语法错误。

    来自 POSIX 程序员手册:

    [...] crontab 条目是一个文本文件,每行由六个字段组成。字段之间用 s.

    分隔

    这就是“crontab 文件中的错误命令错误”消息告诉您的内容:您提供的文件 crontab 无效,因此程序拒绝“安装”(接受)它。

    作为比较,这是我在尝试安装包含故意伪造行 ***** /bin/echo 的文件时遇到的错误:

    $ crontab -e
    crontab: installing new crontab
    "/tmp/crontab.XXXXe2lUUa":5: bad hour
    errors in crontab file, can't install.
    Do you want to retry the same edit? n
    crontab: edits left in /tmp/crontab.XXXXe2lUUa
    $
    

    【讨论】:

    • 谢谢。这样可行。从我看到的任何示例中,我都没有意识到这 6 个字段中的每一个都由空格分隔。 (刚刚意识到我不应该在这些 cmets 中说“谢谢”!!)
    【解决方案2】:

    尝试使用 15 而不是 /15

    另外,如果您希望 crontab 条目以 root 身份运行,最好将其放在 /etc/cron.d/ 文件中,而不是放在 root 自己的用户级 crontab 中。

    【讨论】:

    • 使用 crontab 条目来运行 root 有什么好处?
    • 分钟列中的单独15 将在每小时过去 15 分钟运行脚本,而不是每 15 分钟运行一次。
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多