crontab:当 运行 Python 脚本时找不到命令

crontab: Command not found when running Python script

我写了一个备份 mongoDB 的 Python 脚本,当我直接在终端中测试 运行 时它工作正常。

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

crontab -e 的内容:

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

查看 S3DEV 提供的 post 之后。

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

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

在我的例子中,我在我的脚本中使用 os.system()。

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

而不是

os.system(mongodump [commands])

这是因为从 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。