使用 crontab/cron 安排 python 3.6 脚本

Scheduling a python 3.6 script in using crontab/cron

我只是在我的 Cent OS 开发服务器上设置一个 cron tab/job。

在我的 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.

有什么建议吗?

尝试在您的 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

看起来您正在尝试更改 crontab 中的目录,就像 omu_negru 所说的那样,您需要改用完整路径。那是因为crontab即使运行ning在你的名字下也不会继承你的$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 

应将日志添加到日志轮换中,否则它会不断填满并最终使您的系统 运行 超出 space,但这是本站点已解决的另一个主题。