【问题标题】:Crontab will not execute pythoncrontab 不会执行 python
【发布时间】:2018-01-16 01:34:15
【问题描述】:

提前感谢您关注我的问题社区,

我的 python 测试脚本不会从我的 Centos 7 Crontab 中执行。如果在包含目录或从根/具有完整路径的任何其他目录调用此脚本,将手动执行。我的 Centos Python 位置是 /bin/python。这包含在我的 python 脚本的顶部。

Crontab 本身似乎工作正常:

* * * * * root date >> /home/test.log

将输出重定向到 test.log 没有问题。

请找到我的 Crontab 和测试脚本。

/etc/crontab 中的 Crontab

SHELL=/bin/bash
#PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root


* * * * * root python /scripts/test1.py

至于/scripts/test1.py中的python脚本:

#!/bin/python
import os
os.system('date >> testlog.txt')

您可以提供任何意见/建议,我将不胜感激。 谢谢你,

【问题讨论】:

  • 而不是 date >> /home/test.log 尝试 echo $PATH >> /home/test.log 以确保路径符合预期。
  • 您最好将完整的路径信息放在命令本身中,包括输出的位置(不是当前目录):* * * * * root /bin/python /scripts/test1.py,并且在脚本中:os.system('date >> /tmp/testlog.txt')
  • @paxdiablo 感谢 101 的观察。在我的 python 脚本中,我假设它会自动知道路径……真可惜。非常感谢您!如果您创建答案,我会选择您的作为解决方案!

标签: python linux cron centos7


【解决方案1】:

cron 创建的环境通常远不及 shell 中的环境那么完整。为此,您最好将 full 路径信息放在命令本身中(以免依赖全局 crontab 设置)。

此外,工作目录也可能不是您所期望的,因此最好在 Python 脚本中完全指定文件路径,或者最好将所有控制信息放在一个位置,确保已设置在crontab 条目中。

* * * * * ( cd /tmp ; root /bin/python /scripts/test1.py )

【讨论】:

    【解决方案2】:

    一种方法是从 shell 脚本触发 python 脚本。在 shell 脚本中,在调用 python 脚本之前导出 PATH 变量:

    python_trigger.sh

    export PATH=/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin ...python -u <your script>...

    并配置您通常使用 cron 执行的 shell 脚本。

    【讨论】:

    • 谢谢拉梅什!这种方法似乎也有效。由于我的排名较低,我不能公开投票给你,但当我获得 15 名代表时。我会回来投票的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2020-10-19
    • 2011-03-21
    • 2017-08-26
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多