7

crontab无法执行 Python 脚本。我用来运行 Python 脚本的命令行没问题。

这些是我尝试过的解决方案:

  • #!/usr/bin/env python在顶部添加main.py
  • PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin在顶部添加crontab
  • chmod 777main.py文件
  • service cron restart

我的 crontab 是:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

*/1 * * * * python /home/python_prj/main.py

/var/log/syslog 中的日志是:

Nov  6 07:08:01 localhost CRON[28146]: (root) CMD (python /home/python_prj/main.py)

没有别的了。

main.py脚本从 下的其他模块调用一些方法python_prj,这有关系吗?

任何人都可以帮助我吗?

4

3 回答 3

9

main.py 脚本从 python_prj 下的其他模块调用了一些方法,这有关系吗?

是的,它确实。所有模块都需要在运行时可找到。您可以通过多种方式完成此操作,但最合适的方法可能是在您的 crontab 中设置 PYTHONPATH 变量。

您可能还想在 crontab 中设置 MAILTO 变量,以便收到带有任何回溯的电子邮件。

[更新] 这是我的 crontab 的顶部:

www:~# crontab -l

DJANGO_SETTINGS_MODULE=djangocron.settings
PATH=...
PYTHONPATH=/home/django
MAILTO="cron-notices@example.com"
...
# m h  dom mon dow   command
10-50/10 * * * *               /home/django/cleanup_actions.py
...

(每 10 分钟运行一次清理操作,除了在整点时)。

于 2012-11-06T12:07:50.137 回答
4

您的脚本中有任何文件访问权限吗?如果是这样,您是否在脚本中使用了相对路径(甚至:没有显式路径)?
从命令行运行时,实际文件夹是“您的路径”​​,您从那里启动脚本。当由 cron 运行时,“你的路径”可能会因环境变量而异。
因此,请尝试对您访问的任何文件使用绝对路径。

于 2014-01-27T12:01:28.623 回答
0

检查脚本的权限。确保它可以被 cron 执行——试试 chmod +x main.py。

于 2012-11-06T16:41:17.917 回答