【问题标题】:Unable to Run Python Script In Cron无法在 Cron 中运行 Python 脚本
【发布时间】:2018-08-16 12:40:47
【问题描述】:

我有一个简单的 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

对此有什么想法吗?

【问题讨论】:

  • 您可以创建 .sh 一个脚本,该脚本将生成所有内容并从 cron 运行它。我这样做。这很容易
  • 不确定会是什么样子。
  • 刚刚制作了.sh 一个脚本,它可以像您在crontab 中所做的一样。您可以测试此脚本,一切正常 - 只需将其添加到您的 cron 作业中

标签: python linux cron


【解决方案1】:

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

  • 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 库依赖问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      此行不正确,删除 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

      【讨论】:

      • 此外,根据这是系统范围的 crontab /etc/crontab 还是用户的 crontab,可能缺少指定命令应该在哪个用户下运行的用户列。 man crontab 是你的朋友。
      • 我已经在我的 python 脚本顶部使用 shebang,并且我已将其设置为您列出的方式,但它仍然无法正常工作。
      【解决方案4】:

      你可以创建一个 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
      

      应该可以了,祝你好运!

      【讨论】:

        猜你喜欢
        • 2011-08-10
        • 2018-06-27
        • 2015-03-16
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        相关资源
        最近更新 更多