2011-07-22 59 views
1

我有一个基于Django的网站安装在共享的Web服务器上。我打算有几个cron作业来自动创建报告,发送电子邮件等。问题是共享服务器的时区是“America/New_York”(因为它是一个共享服务器,我没有权限改变它),而我必须根据“亚洲/加尔各答”时区运行克朗。我怎样才能做到这一点?Crontab:设置时区

感谢

克里斯的回答后更新

设置我的本地系统TZ为 '美国/纽约'

$ crontab -e 

TZ=Asia/Kolkata 

#(Accoring to some timezone dt: 21 July 11, time: 20:20) 

20 20 * * * python test.py > test_log.txt 

------ test.py --- ---

from datetime import datetime as dt 
print dt.now() 

------ test_log.txt ----

2011-07-22 08:42:02.592777 

这是根据tz ='亚洲/加尔各答'的时间。我的问题是:我们可以根据亚洲/加尔各答时区执行脚本test.py吗?

+0

我打算建议只是在crontab中补偿时间,但后来我意识到可能实际上并不适用于夏令时的使用。 – moberley

+0

所以要解决这个问题,唯一的办法就是动态创建crontab条目。 – Konstant

+0

而不是datetime.now(),请考虑datetime.utcnow()和相应的偏移量。阅读这篇文章以获取更多信息:http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/。 – Kiwi

回答

1

一种解决方案可能是在20分钟才每小时的cron运行,然后让脚本检查它是否是正确的亚洲时间,只能继续当它是。

+0

找不到任何更好的。这对我来说似乎是最好的选择。谢谢 :) – Konstant

0

把这一行在crontab:

TZ=Asia/Kolkata 
+1

嗨克里斯。谢谢,但如果我没有错,这会将环境变量设置为指定的时区(在本例中为亚洲/加尔各答)。所以任何脚本/命令都会使用这个时区。但脚本本身将根据服务器的时区执行,对吧? – Konstant