服务器运维时经常会用到一些Crontab任务。当你的Crontab中的任务数量超过10个时,你会发现这些任务非常难以管理。特别是当这些Cron任务执行失败时,例如Python实用宝典会在每个月的月初进行一次https证书刷新。协议更新后,我的脚本三个月无效,导致网站宕机一天,证书过期,直到我发现并解决了问题。这是Crontab任务的缺点之一:没有方便的回调函数。但是,现在有一个非常好用的开源Django项目可以在这些crontab失败时通知您,它就是healthchecks。它使用一个回调接口来判断你的Crontab任务是否已经成功执行。比如你有一个python脚本定时执行,healthchecks给的回调URL是:http://localhost:8000/ping/880cb4d配置crontab脚本时,需要写:86***python/home/user/test.py&&curl-fsS-m10--retry5-o/dev/nullhttp://localhost:8000/ping/880cb4d2如果没有按时调用回调接口,healthchecks会发出告警通过电子邮件或其他通知方式。那么这个“不准时”能否设置宽限期呢?比如我有一个任务需要运行一个小时左右,那么这个任务应该期望在一个半小时内调用(Ping)回调接口,如果回调接口没有调用就会报警一个半小时内打电话。答案是肯定的。上图中Period是指两次Ping之间的时间间隔。下面的Grace是“宽限期”的意思,如果距离上次Ping的时间超过了Period+Grace,就会发出告警通知。如果您不习惯这个可视化选择器,它还提供了Crontab表达式来为您定义Period和Grace:多么神奇的工具!它支持的通知方式有:国内用户一般可能只使用Email和Teams,高级用户可能使用IFTTT的Webhooks和Prometheus。总而言之,做自己喜欢的事。下面介绍如何在本地构建这个项目:1.下载项目,使用Git工具克隆项目:gitclonehttps://github.com/healthchecks/healthchecks在后台回复healthchecks,下载完整源码2.建议使用Python3.6+来创建虚拟环境。如果你有conda,就很方便了。创建healthchecks虚拟环境:condacreate-nhealthcheckspython=3.6activatehealthchecks需要先安装Python3.6,然后使用pip安装virtualenv,在终端输入以下命令创建healthchecks虚拟环境:python3-mvenvhealthcheckssourcehealthchecks/bin/activate不同系统的命令可能不一样,所以遇到问题用搜索引擎查询就可以了。3、安装依赖进入上面创建的虚拟环境后,cd进入项目根目录,输入以下命令安装依赖:pipinstall-rrequirements.txt4、数据库配置(可选)项目默认使用SQLite,这意味着您无需特殊配置即可正常运行。如果需要配置MySQL或PostgreSQL,请阅读hc/local_settings.py.example文件进行配置。5.数据表迁移Django项目当然少不了这个环节。在虚拟环境下,在根目录下执行如下命令迁移数据表:pythonmanage.pymigrate当然还要创建一个超级用户:pythonmanage.pycreatesuperuser6。运行项目完成,输入以下命令运行项目:pythonmanage.pyrunserver点击右上角的login以supermanager用户登录开始使用。如果你需要对这个项目进行大规模的改动,推荐使用Pycharm作为编程工具,因为用Pycharm写Django实在是太爽了。
