使用crontab/cron在中调度python 3.6脚本

使用crontab/cron在中调度python 3.6脚本,python,linux,cron,centos7,python-3.6,Python,Linux,Cron,Centos7,Python 3.6,我只是在CentOS开发服务器上设置一个cron选项卡/作业 在我的crontab中,我有以下内容。(忽略时间设置,这是在UTC服务器时间15:32左右添加的,只是为了获得下一次计划的磨合) 在命令行cd中,welcomeclient-0.0.5&&python3.6 main.py工作正常welcomeclient-0.0.5位于水滴的根目录下,python3.6位于/usr/bin中 有什么建议吗?尝试在crontab命令中使用绝对路径: 34 15 * * * cd /foo/bar/we

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

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

在命令行
cd中,welcomeclient-0.0.5&&python3.6 main.py
工作正常
welcomeclient-0.0.5
位于水滴的根目录下,
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_negrou所说的,您将需要使用完整路径。这是因为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%确定。我通常会进入目录并触摸main.log以确保它在被记录到之前确实存在。这对我应该如何引用它有影响吗?我对它进行了修改:
50 20***/usr/bin/python3.6/root/welcomclient-0.0.5/main.py&>/root/welcomclient-0.0.5/main.log
34 15 * * * /foo/bar/welcomeclient-0.0.5/main.py & >> /foo/bar/main.log