我已经查找了每一个答案并尝试了所有方法,但我仍然无法让我的crontab运行python。我甚至创建了一个shell脚本来运行Python,认为隔离可以帮助解决问题,但它仍然不起作用。
我的crontab中有以下条目:
当我手动运行work.sh时,我在test2.txt中得到了我期望的内容。
我的crontab中有以下条目:
* * * * * echo "hello" >> /tmp/test2.txt
* * * * * work.sh
第一行仅每分钟运行一次,以便我可以验证cron是否正在运行。 我已经验证过它正在运行。 每分钟我都会在test2.txt中看到一个新的“hello”
第二行运行名为work.sh的以下脚本
#! /usr/bin/env zsh
echo "Hello World!" >> /tmp/test2.txt
/opt/miniconda3/bin/python3.7 hellopy.py
hellopy.py然后将"Hello from Python"写入test2.txt文件,就像这样:
with open('/tmp/test2.txt','a') as test_txt:
test_txt.write("Hello from Python")
当我手动运行work.sh时,我在test2.txt中得到了我期望的内容。
Hello World!
Hello from Python
然而,当我让cron运行一段时间并查看test.txt文件时,我只能看到来自直接cron行的条目以及work.sh中的echo命令。Python行不会将内容写入该文件。"Hello from Python"这段文本不会显示出来。
hello
Hello World!
hello
Hello World!
hello
Hello World!
我已检查了Python文件-rwxr-xr-x
和文本文件-rwxrwxrwx
的权限,它们看起来都很好。
所以我知道:
- Python代码可以工作;
- Shell脚本可以成功运行Python代码;
- Crontab正在运行;
- Crontab可以运行Shell脚本;
- 通过Crontab运行Shell脚本时,部分脚本的执行是正确的。
但由于某种原因,当Crontab运行Shell脚本时,Python命令不起作用。我还尝试了以下几种方法,但都没有成功:
- 直接在Crontab中的一行中运行Python脚本,而不是通过Shell脚本;
- 在Shebang中使用“bash”而不是“zsh”;
- 使用位于不同路径/usr/bin/python3下的其他Python副本。
在所有的搜索中,我找到的解决方案都与文件权限和绝对路径有关。我已经尝试了所有可能的组合,但似乎没有帮助。我完全被卡住了,任何帮助将不胜感激。
cron
是否已经通过mail
发送了一封邮件(例如:它将被发送到您本地机器的收件箱中),指示未找到hello.py
。 - chepner/etc/crontab
,还是来自/usr/lib/cron/tabs
的特定用户crontab。如果您运行crontab -e
,后者将被修改。 - chepner