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


    发现问题

    之前基于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信号。

  • 相关阅读:
    R语言入门视频笔记--2--一些简单的命令
    Java 虚拟机内存优化
    Apollo 配置中心
    Apollo本地缓存文件
    SpringBoot 远程调试
    SpringCloud微服务架构下 部署在ECS上 403
    Nginx 常用命令
    阿里云数据库Redis版 ERR invalid password
    Apollo配置中心搭建
    Gateway 访问超时 返回504
  • 原文地址:https://www.cnblogs.com/beynol/p/13804631.html
Copyright © 2020-2023  润新知