使用cron作业执行python文件。

时间:2015-04-09 00:08:04

标签: python python-3.x cron crontab ubuntu

我在/ 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)

5 个答案:

答案 0 :(得分:7)

在使用crontab作业forecast.txt时,您未在目录/home/valence中获取文件* * * * * /home/valence/Get_forecast.py的原因是cron不执行目录中的命令/home/valence并且您在程序中以相对路径形式指定了文件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是jexecutable并且指定了shebang。 ./Get_forecast.py部分始终可以替换为python3 Get_forecast.py/usr/bin/python3 Get_forecast.py,以便更加清晰。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我使用this tool生成命令,我通常会执行类似

的操作
 10 * * * * /home/valence/Get_forecast.py > /dev/null 2>&1

答案 3 :(得分:0)

我认为你的cronjob根本没有运行你的程序。运行程序的方式就是这样

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

答案 4 :(得分:0)

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

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

Cron对路径/权限和执行脚本的所有权感到有点滑稽。如果文件是在/ tmp。

下创建的,请告诉我