正在使用 cron 作业执行 python3 文件。

Executing python3 file with a cron job.

我在 /home/valence/ 中有一个 python3 脚本,它从 Yahoo! 获取当天的天气预报(以摄氏度为单位的最高和最低温度值)。天气 API。该文件看起来完全像这样:

#!/usr/bin/python3
from urllib import request
import json
url="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D349859%20and%20u='c'&format=json&diagnostics=true&callback="
response=request.urlopen(url)
str_response = response.readall().decode('utf-8')
dic = json.loads(str_response)
dic["query"]["results"]["channel"]["location"]["region"]="R.M."
low=dic["query"]["results"]["channel"]["item"]["forecast"][0]["low"]
high=dic["query"]["results"]["channel"]["item"]["forecast"][0]["high"]
forecast=open("forecast.txt", "w+")
forecast.write("Minima: "+str(low)+" Maxima: "+str(high))
forecast.close()

我执行的时候没问题。它使用正确的值创建或覆盖文件 forecast.txt,但是当我尝试使用 cron 执行以下 cron 作业时:

* * * * * /home/valence/Get_forecast.py

没有创建或修改文件 forecast.txt。

所以我需要知道我做错了什么以及如何使它按预期工作。 cron 作业并不是每分钟都执行一次(因为一天的预报在一天中保持不变),但现在我已经这样做了,所以我可以看到变化而不必等待太多。

注意:我是 linux 的新手(我使用的是 Lubuntu)

我使用 this tool 来生成命令,我通常会做类似

的事情
 10 * * * * /home/valence/Get_forecast.py > /dev/null 2>&1

我认为您的 cronjob 根本没有 运行ning 您的程序。 运行 一个程序的方法是这样的

python script.py

因此您的 cronjob 必须如下所示。

* * * * * python /home/valence/Get_forecast.py

* * * * * cd /home/valence && python Get_forecast.py

您可以像这样将 cronjob 的所有输出发送到日志文件。

* * * * * cd /home/valence && python Get_forecast.py >> output_logs.op

我建议提供输出文件的绝对路径:

forecast=open("/tmp/forecast.txt", "w+")

Cron 对执行脚本的路径/权限和所有权有点搞笑。如果文件是在 /tmp 下创建的,请告诉我。

使用crontab 作业* * * * * /home/valence/Get_forecast.py 时没有在目录/home/valence 中获取文件forecast.txt 的原因是cron 不执行目录[=] 中的命令13=] 并且您在程序中以相对路径形式指定了文件 forecast.txt。所以文件是在别处创建的。

要获得预期的文件输出,您可以使用以下 crontab 作业:

* * * * * cd /home/valence && ./Get_forecast.py

这明确地将当前工作目录指定为 /home/valence,并从那里执行脚本。

此外,要从 stdout 和 stderr 获取输出,添加重定向在发生意外情况时总是有帮助的:

* * * * * cd /home/valence && ./Get_forecast.py > /tmp/forecast.log 2>&1

注:

前两个 crontab 作业假定 Get_forecast.py 可执行并指定了 shebang。 ./Get_forecast.py 部分始终可以替换为 python3 Get_forecast.py/usr/bin/python3 Get_forecast.py 以更清楚。

下一个 运行 python3 脚本对我有用:

* * * * * /usr/local/bin/python3 /Users/gabriel/python/myScript.py

使用 which python3 找到您的 python 版本的路径,然后将路径添加到您的文件。