这次遇到一个问题:
在crontab中设定python脚本的在5点执行,然后代码会在5点正确执行,但是获取时间时,总是取到8个小时之前的时间。
然后我做了以下尝试:
- 直接执行python脚本,或者使用交互式命令行的时候,python的时区是正确的。但是在crontab中执行的时候,总是取到utc时间,而不是东八区。
- 在crontab中直接用shell命令 date -R 打印日期,发现是正确的时间
- 在python交互式命令行中,os.environ['TZ']可以看到是Asia/Shanghai,而在crontab中,会报错:找不到这个环境变量
综上可知,crontab的时间和时区没有问题,而crontab执行python脚本时,时区有问题。也就是说crontab的环境变量和系统的环境变量不一致。这样会导致在parse “2018-05-16”这样的字符串转成时间戳的时候,和东八区的时间戳差8个小时(因为parse时使用的时区的是utc)。
解决方案:
python(3.5,linux系统)在判断本地时区的时候,会读一个叫TZ的环境变量。如果你确定自己的crontab时间和系统时间一致,那么在crontab执行python脚本,改为先执行shell脚本,shell脚本的第一个命令是设置一下这个环境变量:
export TZ=Asia/Shanghai
第一个命令是执行你的python脚本
/usr/bin/python3 /home/webadmin/liuhuanyu/test/Test.py
这样python的时区就没问题了。
网友评论