【问题标题】: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 了。