首页 > 其他 > 详细

使apscheduler的docker容器支持优雅退出

时间:2020-10-12 20:00:33      阅读:46      评论:0      收藏:0      [点我收藏+]

发现问题

之前基于apscheduler创建了一个定时任务服务,并通过docker打包部署。

后来发现,关闭/重启该服务的时候总要等一会儿,调查发现是因为我们的容器不支持优雅退出,docker发现无法正常退出后,等待一段时间(比如10秒)后强杀容器。

解决思路

我们关闭容器的时候,比如执行 docker stop myservice命令后,docker会给myservice容器的root进程发送一个SIGTERM信号,而apscheduler默认不会处理这个信号。

所以,要想优雅退出,我们就需要自己处理docker发过来的SIGTERM信号。

代码示例

import signal
from apscheduler.schedulers.blocking import BlockingScheduler


def exit_gracefully(signum, frame):
    print(‘shutdown scheduler‘)
    scheduler.shutdown()


if __name__ == "__main__":
    scheduler = BlockingScheduler()
    scheduler.add_job(xxx_task, ‘interval‘, hours=1, max_instances=1)
    signal.signal(signal.SIGTERM, exit_gracefully)
    scheduler.start()

关键点就在于,倒数第二行的signal.signal(signal.SIGTERM, exit_gracefully),在启动scheduler前,监听了SIGTERM信号。

使apscheduler的docker容器支持优雅退出

原文:https://www.cnblogs.com/beynol/p/13804631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!