概述

前一阵重新配置完树莓派,发现cron定时有问题.

排查

最近用树莓派做完计划任务,每天早上定时执行,命令如下:

0 7 * * * /path/of/script.sh

发现没有执行,之后就去上班了,到家后发现脚本确实是执行过了.
又测试了下0间隔,脚本确实是执行的,确定脚本没有问题,所以问题应该在于cron的执行时间上.
由于中国是在东8区,所以又测试下了当前时间减8小时

50 1 * * * /path/of/script.sh

(测试时间为本地时间:9:49)
果真在下一分钟脚本被执行了,由此确定问题出在时区上!

刚开始也百思不得其解,在timedatectl里设置了时区,时间又自动同步,系统时间是没有问题的,唯独cron时间有问题
google了下,解决方案如下:

ln -s /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 
/etc/init.d/crond restart 

查了下/etc/localtime的软链接,如下:

lrwxrwxrwx 1 root root 35 Oct 30 07:15 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

链接没有问题,然后按部就班重启了下cron:

systemctl restart cron

再测试,问题解决了!

总结

问题出在刚开始配置完系统后,安装cron,之后设置的系统时区.此时系统时区为+8,而cron服务在启动的时候对初始化时区还是0,更新完时区没有变更.
实际上,还是这次配置系统太顺利,安装完就直接部署运行了,如果重启一次系统,再下次重启时cron会读取新的系统设置,根本就不会出现这种问题了