美文网首页
像代码上线一样管理crontab

像代码上线一样管理crontab

作者: 小顶 | 来源:发表于2017-02-21 17:04 被阅读0次

    随着业务发展,我们产品的定时任务越来越多,不过目前都部署在一台管理机上,作为一个无备份的单点存在,这显然是很不妥当的。为了解决这一问题,我试图找些可用的工具来进行统一管理及备份,但方案都太重了,不适合我们这种几台服务器的小产品,还增加管理成本。

    想想其实我要的功能很简单,就是要让定时任务能有所备份,最好能像代码上线一样,线下修改,线上生效就好了。那就用上线系统实现可以吗,可以。

    实现方案:一般我们都在root帐号下编辑crontab,保存后的内容其实是被写到了/var/spool/cron/下的root文件中,而我们只要想办法改写这个文件就好了。

    首先,我把定时任务放在版本控制中进行管理,并利用上线系统发布到线上。

    其次,上线cron文件,并使其生效。

    我们用的上线系统是walle,他支持'上线后任务':即我们可以定义一些需要在上线完成后执行的命令,比如重启web server之类的。基于此,只要在文件推送完成后,通过 cat root > /var/spool/cron/root 命令把crontab文件覆盖掉就可以了。不过需要注意,/var/spool/cron/root文件的权限需要是700,否则CRON不会运行。具体操作过程,还要对你的上线系统放开一定权限使其可以完成这一工作。

    补充一点,为保证未来上线cron文件时,不会因错误引起cron运行失败,我增加了一条心跳的任务,即每分钟touch一个心跳文件,如/tmp/cron_heartbeat,并利用zabbix对这个文件进行监控,如果超过一定时间该心跳文件未产生变化,可能就说明了cron的运行遇到问题,便会报警通知。

    后续工作:以上只是简单的解决了cron无备份及手工管理的问题,后续还有两件事可以继续完善:

    1,开发 一个简单的cron管理工作,把修改cron文件这件事从手工改为图形化。

    2,想办法对定时任务的完成情况进行监控,防止意外发生。

    相关文章

      网友评论

          本文标题:像代码上线一样管理crontab

          本文链接:https://www.haomeiwen.com/subject/fpuuwttx.html