【发布时间】:2020-06-12 01:41:33
【问题描述】:
我已经找到了所有可以找到的答案并尝试了所有方法,但我仍然无法让我的 crontab 运行 python。我什至创建了一个 shell 脚本来运行 python,认为隔离会有所帮助,但它仍然不起作用。
我在 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 中的一行而不是通过 shell 脚本运行 python 脚本。
- 在 shebang 中使用 'bash' 而不是 'zsh'
- 在不同的路径 /usr/bin/python3 中使用不同的 python 副本
我在所有搜索中不断遇到的解决方案与文件权限和绝对路径有关。我已经尝试了所有可能的组合,但似乎没有任何帮助。我完全被困住了。任何帮助将不胜感激。
【问题讨论】:
-
你认为脚本的工作目录是什么? hellopy.py 在哪里?
-
我将脚本和 hellopy.py 都放入 /usr/local/bin 以避免混淆。我这样做是因为我那里也有 python,所以一切都在同一个目录中以避免混淆。我还检查以确保 /usr/local/bin 在执行路径中
-
检查
cron是否给您发送了一封电子邮件(使用mail,例如:它将发送到您本地机器上的收件箱),表明找不到hello.py. -
cron查找 hello.py 的工作目录是您的主目录,而不是/usr/local/bin。 -
感谢您的电子邮件建议。刚才查了一下,没有这个邮箱