我有一个简单的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
对此有何看法?
答案 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 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
那应该做到的,祝你好运!