【问题标题】:Scheduling a python 3.6 script in using crontab/cron使用 crontab/cron 调度 python 3.6 脚本
【发布时间】:2018-01-26 05:06:42
【问题描述】:

我只是在我的 Cent OS 开发服务器上设置一个 cron 选项卡/作业。

在我的 crontab 中,我有以下内容。 (忽略时间设置,添加大约 15:32 UTC 服务器时间只是为了获得下一次计划运行)。

34 15 * * * cd welcomeclient-0.0.5 && python3.6 main.py

在命令行cd welcomeclient-0.0.5 && python3.6 main.py 工作正常。 welcomeclient-0.0.5 位于 droplet 的根目录下,python3.6 位于 /usr/bin 中。

有什么建议吗?

【问题讨论】:

    标签: python linux cron centos7 python-3.6


    【解决方案1】:

    尝试在 crontab 命令中使用绝对路径:

    34 15 * * * cd /foo/bar/welcomeclient-0.0.5 && /usr/bin/python3.6 main.py
    

    或者,假设 main.py 也不使用其中的相对路径:

    34 15 * * */usr/bin/python3.6 /foo/bar/welcomeclient-0.0.5/main.py
    

    【讨论】:

    • 这对我应该如何引用它有影响吗?
    • 我修改的是这样的:50 20 * * * /usr/bin/python3.6 /root/welcomeclient-0.0.5/main.py && >> /root/welcomeclient-0.0.5/main.log
    【解决方案2】:

    看起来您正在尝试更改 crontab 中的目录,就像 omu_negru 说您需要使用完整路径一样。那是因为 crontab 即使以你的名字运行也不会继承你的环境变量,例如 $PATH。

    试试这个。首先,转到您的脚本所在的目录...并将您的 main.py 转换为可执行文件,这样您就不必再调用 python main.py 了。最简单的方法是......

    $ chmod u+x main.py
    

    现在,如果您执行 ls -l,您会看到权限的用户部分中有“x”,这将允许您直接运行它。

    -rwxr--r-- 1 user user 0 Aug 17 17:55 main.py
    

    现在您已准备好将 crontab 语法简化为类似这样...

    34 15 * * * /foo/bar/welcomeclient-0.0.5/main.py 
    

    我还喜欢将脚本的输出捕获到日志文件中,以便在事情没有按计划进行时更容易进行故障排除,如下所示:

    34 15 * * * /foo/bar/welcomeclient-0.0.5/main.py & >> /foo/bar/main.log 
    

    应该将日志添加到日志轮换中,否则它将不断填满并最终使您的系统空间不足,但这是本网站已经讨论的另一个主题。

    【讨论】:

    • 添加了我的问题中包含的信息 - 此外,main.log 是否必须在输出任何内容之前存在,或者 cron 会在第一次“成功但不成功”运行后创建它吗?跨度>
    • 我现在实际上 100% 确定。我通常会去目录和touch main.log 只是为了确保它在记录到它之前确实存在。
    猜你喜欢
    • 2012-06-10
    • 2018-06-26
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2018-03-25
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多