python - 从 cron 运行脚本时运行外部程序
问题描述
我有一个从命令行执行时可以正常工作的 python 脚本。但是当我尝试从 cron 运行它时,它不起作用。
command = "rsync -avHP --delete --bwlimit=800 rsync://mirror.nsc.liu.se/CentOS/7.8.2003/ /home/me/reposync/centos"
proc=subprocess.run(command.split(), capture_output=True)
cronjob 运行。cronfile 看起来像这样:
PATH=/home/me
40 13 * * * me cd $PATH && ./reposync.py sync 2> /tmp/test.txt
但是我从以下位置收到此错误(是的,两次)print(proc.stderr.decode('utf-8'))
:
-avHP: rsync: command not found
似乎问题与找不到rsync
有关,但我不知道该怎么办。
输出/tmp/test.txt
:
FileNotFoundError: [Errno 2] No such file or directory: 'rsync'
我尝试添加shell=True
,subprocess.run
但似乎没有什么不同。或者它不会抛出那个异常,但是从proc打印stderr时我仍然得到同样的错误。
我想我可以通过包含绝对路径来解决它,rsync
但感觉这是一个坏主意。但我可能错了。如果这是正确的方法,请解释原因。
解决方案
在您的 crontab 中,您正在覆盖您的$PATH
变量,该变量现在仅包含目录/home/me
。rsync
现在找不到您的可执行文件,因为它不在您的主目录中。
PATH=...
通过删除该行并使用其完整路径调用您的脚本来更改您的 crontab 条目:
40 13 * * * me /home/me/reposync.py sync 2> /tmp/test.txt
推荐阅读
- azure - 迁移(或使用)经典存储帐户上的旧 VHD 以与新(非经典)VM 一起使用
- c++ - API 监视器类型定义 (XML) 到 C++ 代码
- java - 如何访问字符串请求?
- azure - 在调用 RegisterNativeAsync 时,使用 Xamarin 的 WindowsAzure.Messaging for iOS 会产生 ObjC 运行时异常
- php - PHP cURL grab_page("") 不适用于某些网站
- javascript - 从php mysql循环json数据获取javascript函数
- sql-server - 错误:在贡献表中未找到以下列
- arrays - 查找多个峰值数组,最佳算法
- html - 字体真棒图标不出现
- rocket-chip - 默认缓存参数,如何更改,限制等