easysoft / zentaopms

Zentao is an agile(scrum) project management system/tool, Free Upgrade Forever!​
http://www.zentao.pm
Other
1.29k stars 322 forks source link

Docker时间超前,导致每日定时任务task,不准时执行,把docker时间同步服务器时候后,所有的定时任务都停摆 #114

Closed owlbrave closed 1 year ago

owlbrave commented 1 year ago

问题描述: 我的项目搭建在docker容器下,某一天(可能是运维操作了什么),导致docker中的时间超前了。这时候会导致定时任务中,原来设置早上发邮箱的任务,突然不准时生效。然后我们找到了是由于docker时间和服务器时间不一样导致的。我们就修改docker时间,把docker同步到服务器时间,这时候发现定时任务完全不跑了。这导致我们的团队好几天没有收到邮箱信息了。

根据上述的问题,我们从代码中找到了答案

image

问题分析:由于docker时间超前,cron执行的任务会记录lastTime,我们修改docker时间后,查询到的lastTime还是超前的时间,造成任务停摆。

建议优化:可以判断最后执行时间(lastTime)和 当前时间做对比,如果当前时间小于LastTime,我们可以把数据库中,大于当前时间的lastTime清理掉,或者替换成当前时间。

ysicing commented 1 year ago

@owlbrave 请问是哪个容器镜像? 或者试试这个镜像 quicklyon/zentao-docker

owlbrave commented 1 year ago

@ysicing 这是我使用的命令:docker pull easysoft/zentao:18.3

ysicing commented 1 year ago

@owlbrave 可以试试我们的新版本镜像 easysoft/quickon-zentao:18.3-20230423, 使用参考 quicklyon/zentao-docker/docker-compose.yml

owlbrave commented 1 year ago

重建镜像确实可以解决定时任务问题,但是我提个这个issue是个优化问题!

sy-records commented 1 year ago

禅道中的时区是在安装时设置好的,如果运维有其他的操作的话,导致超前,建议也重置下crontab表中的数据。

后期会考虑改进这里的逻辑。

xiaofeng993229 commented 1 month ago

已记录,内部反馈 id 6316