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。
我写了一个备份 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。