无法在Cron

时间:2017-09-07 20:21:04

标签: python linux cron

我有一个简单的Python脚本,我试图将其设置为cron作业,但它拒绝运行。它运行时我自己运行它称为:

python script.py

我已尝试在crontab中设置我的环境变量,但我无法让它工作。我的crontab看起来像这样:

# For more information see the manual pages of crontab(5) and cron(8)
# m h  dom mon dow   command
SHELL=/bin/bash
PATH=/home/netadmin/bin:/home/net/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/b$

*/2 * * * * PYTHONPATH=/user/bin/python /home/net/path-to-script/script.py >>/home/net/out.txt 2>&1

对此有何看法?

4 个答案:

答案 0 :(得分:0)

此行不正确,请删除PYTHONPATH

*/2 * * * * PYTHONPATH=/usr/bin/python /home/net/path-to-script/script.py >>/home/net/out.txt 2>&1

=>

*/2 * * * * /usr/bin/python /home/net/path-to-script/script.py >>/home/net/out.txt 2>&1

但建议使用Shebang

答案 1 :(得分:0)

为什么要设置环境变量 PYTHONPATH ,你可以直接运行它我也相信python的路径是 usr 而不是用户尝试这个

*/2 * * * * cd /home/net/path-to-script ; /usr/bin/python script.py >>/home/net/out.txt 2>&1

答案 2 :(得分:0)

你混淆了两个不相关的概念:

  • Python 解释器位置,它是Python解释器程序的路径(某处的可执行文件)
  • PYTHONPATH ,这是一个表示Python库搜索位置(目录)的字符串。它是 Python解释器的位置,但是以:为单位分隔目录列表。如果您不知道它有用,请不要使用它!

如果python script.py有效,通常无需调整PYTHONPATH。您可以使用which获取 Python解释器的完整路径:

$ which python
/usr/bin/python

这将打印您可以在crontab中使用的 Python解释器的绝对路径:

*/2 * * * * /usr/bin/python /path/to/script.py >>/home/net/out.txt 2>&1

如果您不需要,请不要调整PYTHONPATH。如果script.py依赖于系统上未安装的库,我建议您学习&使用virtualenvs。它很容易并且解决了大多数Python库依赖性问题。

答案 3 :(得分:0)

您可以创建一个shell脚本(在本示例中,我们将其称为foo.sh):

#! /bin/bash
/user/bin/python /home/net/path-to-script/script.py >>/home/net/out.txt 2>&1

您需要使foo.sh可执行,因此您需要运行以下命令:

chmod +x /home/net/path-to-script/foo.sh

最后,您可以通过运行以下命令(似乎很熟悉)将shell脚本添加到cron作业中:

crontab -e

添加如下一行:

*/2 * * * * /home/net/path-to-script/foo.sh

那应该做到的,祝你好运!