【问题标题】:crontab: Command not found when running Python scriptcrontab:运行 Python 脚本时找不到命令
【发布时间】:2020-11-04 18:42:53
【问题描述】:

我编写了一个 Python 脚本来备份 mongoDB,当我直接在终端中测试运行时它运行良好。

但是,我从 cron 得到一个错误,说 mongodump: command not found - 尽管当我直接在终端中运行脚本时,命令 mongodump 工作正常。

crontab -e的内容:

* * * * * cd <path-to-script> && python3 script.py

【问题讨论】:

标签: python shell cron environment


【解决方案1】:

查看 S3DEV 提供的帖子后。

将 mongodump 的完整 env 路径运行到 python 脚本中有效。 要获取 mongodump 的完整路径,在终端中:

which mongodump
>>/usr/local/bin/mongodump

就我而言,我在脚本中使用 os.system()。

os.system(/usr/local/bin/mongodump [commands])

而不是

os.system(mongodump [commands])

【讨论】:

    【解决方案2】:

    这是因为从 cron 启动的程序无法获得登录 shell 使用的环境。特别是,PATH 通常非常小。从 cron 运行脚本的久经考验的方法是:

    • 始终使用 crontab 中脚本的绝对路径,例如 /path/to/script
    • /path/to/script 的开头设置和导出 PATH 以及所需的任何其他变量,例如与export PATH=$(/usr/bin/getconf PATH):/usr/local/bin

    您可以测试任何脚本是否可以在简化的环境中运行

    env -i HOME=$HOME /path/to/script
    

    如果运行正常,就可以进行 cron 了。

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2011-09-21
      相关资源
      最近更新 更多