背景

目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题、发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前置,在用户反馈之前接受故障处理故障.

历史问题总结:

  • 人为误操作导致所有的crontab全部清空
  • 定时任务服务器误操作后灾难恢复困难
  • 未加锁机制检测启动多个进程导致数据错乱
  • 定时任务被系统oom 导致任务失败
  • 定时任务服务器重启后cron未开机自启导致任务未执行
  • 定时任务失败后无监控、出问题无感知(发现问题&处理问题滞后)
  • ...................

一、定时任务管理规范

问题描述:目前上线是通过运维在salt服务器分发的方式,发布方式不透明,还存在手动修改的方式,不规范,曾出现过误操作导致全清空事件,定时任务服务器误操作后灾难恢复困难的问题

解决方案: 统一规范成jenkins发布的模式,同发布代码走相同的逻辑

二、定时任务发布选择机器问题

问题描述: 目前发布代码需要选择服务器,存在错误选择的情况,从而引发问题.

解决方案:优化发布方式,发布无需选择服务器,自动判断发布服务器。

三、定时任务无法及时查看

问题描述:目前是通过定时同步任务列表到/tmp/work_cron的方式,存在延迟

解决方案: 研发直接查看gitlab的仓库即可

四、定时任务执行OOM中断

问题描述: 较大的程序执行会耗费很大的内存,从而出现被系统oom的风险,然而系统oom后目前并不能发现

解决方案:针对系统oom的问题,可以收集/var/log/message的方式进行报警处理,可第一时间发现问题.

五、定时任务进程数据安全保障(锁机制)

定时任务出现hang住进程,导致很多进程启动的问题 ;

多个进程同时运行导致数据错乱问题.

例如每次写的临时表名称一致,两个进程同时写则可能产生错误的数据结果.

解决方案: 对于不可同时启动两个进程的任务,程序需要加锁判断状态保证数据的可靠性

六、大型定时任务升级队列实现

问题描述: 定时任务应当尽量的轻量化,最优方案是只做定时任务的触发,而后程序通过队列方式进行数据处理.

例如定时任务程序单次运行需要几十分钟以上,或者处理的数据量达千万级别.

解决方案:

方案一

  1. 将重量级别的任务改造优化成队列的方式实现. 代码实现数据处理逻辑,数据放入队列依次处理的方式.
  2. 使用cronsun触发的方式进行定时任务的管理

方案二

  • 迁移至大数据任务平台,利用大数据集群运算能力完成相关功能

七、定时任务状态感知

问题描述:目前每个定时任务的执行状态(成功/失败/hang/warn)无法感知,只能通过日志来排查(如果有日志)

  1. 如何知道任务是否开始执行?(目前靠人)【cron服务未开启】
  2. 如何知道任务执行成功/失败?(目前靠人)【脚本执行80%后失败】
  3. 任务执行失败如何第一时间发现?(目前基本靠业务&用户侧反馈)

    解决方案:
  • 增加判断crontab是否按照预期执行监控机制
  • 增加状态汇报逻辑,使任务执行可视化&数据化,并且增加报警机制.(核心任务)
  • 增加定时任务日志,提供关键字进行报警(核心任务)

八、healthchecks 监控系统

详情移步官网: https://healthchecks.io/ (开源软件)

Healthchecks 是一个用来 监控定时任务(cron job)是否按时运行 的系统。它通过一种非常简单有效的方式帮助你发现定时任务是否异常或失败。

主要作用

  • 监控 cron、systemd timer、脚本等是否按时执行;
  • 当任务没有按时“打卡”时,发送通知(邮件、Webhook、Slack、钉钉等);
  • 提供简单的 Web UI 记录任务运行历史和状态。

Healthchecks 的工作原理如下:

  1. 系统为每个任务分配一个唯一的“ping URL”(如 https://hc.example.com/your-uuid);
  2. 每次任务执行成功后,向这个 URL 发一个 HTTP 请求(称为“ping”);
  3. Healthchecks 会为每个任务设置一个超时时间(比如 1 小时);
  4. 如果超时未收到“ping”,则认为该任务未执行或执行失败,触发告警

应用场景

  • 生产环境中的定时脚本/任务监控
  • 如 MySQL 备份脚本、日志归档、数据同步等。
  • Kubernetes CronJob 监控
  • CronJob 成功后加一个 ping 请求,Healthchecks 提供独立的状态记录和报警。
  • 没有集成监控系统的小团队
  • Healthchecks.io 提供简单、即开即用的 Web UI 和通知集成,非常适合中小项目快速接入。
  • 与 Prometheus/Grafana 互补
  • 可在任务层面提供更直观的“是否执行”状态,结合已有监控形成闭环。

如果你有多个定时任务,还可以用标签、项目分组等方式管理。如果你有兴趣搭建私有版本,它也支持 Docker 一键部署。

定时任务稳定性解决方案-healthchecks监控系统的更多相关文章

  1. Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)

    Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08    

  2. Prometheus+Grafana企业监控系统

    Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...

  3. 安防视频监控系统前端摄像机——DSP与SOC摄像机

    一.DSP摄像机 DSP(Digital Signal Processing)即数字信号处理,它是利用数字计算机或专用数字信号处理设备,以数值计算的方法对信号进行采集.变换.综合.估值.识别等加工处理 ...

  4. Opserver开源的服务器监控系统(ASP.NET)

    Opserver是Stack Exchange下的一个开源监控系统,系统本身由C#语言开发的ASP.NET(MVC)应用程序,无需任何复杂的应用配置,入门很快.下载地址:https://github. ...

  5. 利用WCF的双工通讯实现一个简单的心跳监控系统

    何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...

  6. 监控系统Opserver的配置调试

    Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们开源了其监控系统的时候正好部门也在关注监 ...

  7. Zabbix监控系统深度实践

    Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著  ISBN 978-7-121-24 ...

  8. 利用WCF的双工通讯实现一个简单的心跳监控系统 z

    利用WCF的双工通讯实现一个简单的心跳监控系统 http://www.cnblogs.com/zuowj/p/5761011.html 何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态 ...

  9. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  10. 监控系统Opserver

    监控系统Opserver的配置调试   Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...

随机推荐

  1. Oracle连接 ORA-28001: 口令已经失效解决方法

    cmd进入命令行 C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期 ...

  2. Linux中如何将txt文件转为png格式

    Linux中如何将txt文件转为png格式 linux将txt文件转为png格式如果文本中没有中文,使用enscript,如果文本包含中文,使用paps命令.但是实际使用中,paps部分版本也不支持中 ...

  3. 问一下,利用在线 DeepSeek 等 API 服务实现一个答题 APP

    简介 这是一个利用 Android 无障碍功能 + 悬浮窗 + 大模型的搜题应用 原理就是利用无障碍读取屏幕内容,然后通过悬浮窗来显示答案 众所周知我是一个学渣,所以在搜答案方面颇有成就 大概是在 4 ...

  4. FLink17--聚合函数-AggWindowApp

    一.依赖 二.代码 package net.xdclass.class11; import org.apache.flink.api.common.RuntimeExecutionMode; impo ...

  5. CSP 考前注意事项

    考试策略 J组 争取在 \(10:00\) 之前把所有题目稳定拿下.如果有题目没有思路.比较难写还没调出来或者想不出来,那么可以先放着,跳题.把其他所有题打完之后写个对拍,挂后台一直拍着. 然后剩下的 ...

  6. AI之Ollama

    介绍 什么是llama LLaMA(Large Language Model Meta AI)是Meta开发的大规模预训练语言模型,基于Transformer架构,具有强大的自然语言处理能力.它在文本 ...

  7. [ABC259F] Select Edges 题解

    很容易想到树形 dp. 考虑在有根树内,每个点都有两种状态: 不选自己和父亲的边: 要选自己和父亲的边. 那么单独对于子树内部而言,就要分两种情况: 最多可以向 \(d_i\) 个孩子连边,对应上述第 ...

  8. DeepSeek本地性能调优

    技术背景 大模型性能调优是一个很复杂的工程,涉及到很多细节,如果真要对模型动刀子,还需要对模型和数据集本身有非常好的理解.这里我们仅仅考虑模型加载过程中,可以优化的一些参数配置.关于DeepSeek在 ...

  9. 微信小程序单击事件与长按事件冲突的解决办法

    众所周知,在小程序中,长按事件一松手是会触发单击事件的,而在我们的实际需求中,往往是需要单击事件和长按事件并存的. 然而,小程序却又好像想到了这种情况似的,给了我们一个触摸开始,一个触摸结束 也就是, ...

  10. Type-C协议(CC检测原理)-CC1和CC2接电阻-数字和模拟耳机兼容

    1 简介 USB Type-C其实是USB的一种接口形态,USB的接口形态可以分为USB Type-A.USB Type-B.USB Type-C,USB Type-A和USB Type-B还有两种不 ...