我的python脚本没有在我的crontab下运行.
我把它放在顶部的python脚本中:
crontab -e
我试过这样做:
myscript.py
添加到我的crontab -e:
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
我的/ var/log/cron文件说:
/usr/bin/python
但是我的脚本没有运行,因为当我检查我的sql数据库时,没有任何改变.如果我直接在终端中运行它,如下所示:
/home/me/project/myscript.py
我得到了正确的结果.
这是myscript.py:
chmod a+x myscript.py
Run Code Online (Sandbox Code Playgroud)
编辑:每条评论:是的,/usr/bin/python /home/me/project/myscript.py
存在.我也可以使用just直接运行python脚本crontab -e
.myscript.py
作品.所以我不相信这是原因?
dm0*_*514 24
键入时会发生什么
/home/me/project/myscript.py
进壳?
你可以/usr/bin/python
在你的crontbb命令中明确使用吗?
您可以使用绝对路径到您的test.db
或cd
正确的目录然后执行您的python脚本?
这有助于在python中包含调试语句并记录一些数据.调试Crontab非常棘手.
sha*_*ors 15
脚本可能无法启动,因为它无法找到python解释器.Crontab环境可能与您正在使用的shell环境有很大不同.搜索路径可能显着不同.此外,您通过显式启动python解释器来测试脚本,而您希望crontab只启动脚本.我把这行放在我的python脚本的顶部:#!/ bin/env python.只要它在搜索路径中,该行将帮助定位解释器,无论其安装在哪个目录中.
小智 11
互联网上有很多半答案,所以我想我会抓住这个来节省别人的时间.
首先,cronjob很难告诉你这个失败的地方.我建议将stderr输出发送到这样的日志文件:
# m h dom mon dow command
* * * * * /path/to/your_file.sh >> out.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
由于这可能以用户身份运行命令,因此请检查主目录中的日志文件.请注意,此脚本每分钟运行一次,这对调试很有用.
下一个问题是你可能有一个路径问题......因为脚本可能正试图从你的主目录执行.此脚本设置当前目录,将其回显到文件,然后运行您的程序.
试试这个 :
#!/bin/sh
cd "$(dirname "$0")";
CWD="$(pwd)"
echo $CWD
python your_python_file.py
Run Code Online (Sandbox Code Playgroud)
希望这能节省别人一些调试时间!!!
通常是因为crontab 使用的python 与您在shell 中使用的python 不同。解决这个问题的最简单方法是:
$ which python # it may be "python3" or something else
/usr/bin/python
* * * * * /usr/bin/python test.py
还想提一下,env -i /bin/bash --noprofile --norc
在 shell中使用可以让您拥有与 crontab 使用的环境相同的环境,这对调试非常有帮助。
通常,类似crontab的问题是由PATH环境变量比普通用户的PATH环境更具限制性/不同引起的。由于您的外壳程序使用PATH环境查找可执行文件(例如,在外壳程序提示符下键入“ python”时,在/ usr / bin中找到了/ usr / bin / python),因此当PATH缺少常见位置时,例如/ usr / bin或/ usr / sbin,您的cron作业将失败。这已经困扰了我很多次。简单的解决方法是在需要任何命令之前,在crontab文件顶部附近自己显式设置PATH。因此,只需像往常一样编辑crontab并在顶部附近添加类似的内容(如果您的二进制文件不在以下路径之一中,则需要在冒号后面添加它):
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Run Code Online (Sandbox Code Playgroud)
另外,只需在crontab中使用二进制文件和脚本的绝对路径即可。
小智 5
尝试这个
* * * * * cd <directory_where_python_file_is> && bin/app etc/app_defaults.yaml
Run Code Online (Sandbox Code Playgroud)
cron 存在一些路径问题。因此,当您移动到包含 python 文件的目录时,cron 的工作方式就像魅力一样!