如何管理多台机器上的 crontab 任务

*nix 机器上,我们通常用 crontab 来管理定时任务,比如指定时间重启某个服务,备份数据库,跑某些分析/统计服务等。

目前有很多任务调试系统和工具,比如:

每个系统都有自己的特色和应用场景,如果你只想集中管理多台机器上的定时任务,可以试试 cronsun

cronsun 支持:

  • Web 界面统一管理任务
  • 任务失败重试
  • 任务失败邮件提醒
  • 多机单任务(防止单机挂掉任务不按时执行)
  • 单机任务并行数限制
  • 执行单次任务
  • 多机器严格的时间间隔任务
  • 支持安全性配置,可以限制任务脚本的后缀和执行用户
  • ...

cronsun 架构:

                                                [web]
                                                  |
                                     --------------------------
           (add/del/update/exec jobs)|                        |(query job exec result)
                                   [etcd]                 [mongodb]
                                     |                        ^
                            --------------------              |
                            |        |         |              |
                         [node.1]  [node.2]  [node.n]         |
             (job exec fail)|        |         |              |
          [send mail]<-----------------------------------------(job exec result)

cronsun 主要概念:

任务

任务类型

cronsun 中,有三种类型的的任务:

  • 普通任务,和 crontab 中的任务一样。
  • 单机单进程任务,普通的 crontab 任务是单机的,如果执行任务的机器出现问题,任务可能执行失败。cronsun 提供此任务类型是保证有多台机器可以执行一个任务,但在执行任务被执行时,只有一台机器在执行任务。
  • 一个任务执行间隔内允许执行一次,这个类型的任务和单机单进程任务类似,但限制更严格。因为多台机器间,时间可能会不一致,而某些任务要求执行的时间间隔要严格一致时,可以考虑采取这种类型。
任务分组

任务分组是为了方便管理,在添加任务时可以在任务分组里增加新的分组,查询时按分组查出相应的任务。

任务脚本

相当于 crontab 中的执行命令,复杂的任务(如 pipe)需要写成 shell 脚本。

用户

指定执行任务的用户

超时设置

超过设定的时长,cronsun 会停止执行任务,防止出问题的任务长时间占用资源。

并行数设置

设置在单个节点上面同时可执行多少个相同的任务,针对某些任务执行时间很长,但两次任务执行间隔较短时比较有用。

失败重试

任务执行失败时,重新尝试执行任务,直到任务执行成功或超过设置的次数。

定时器

相当于 crontab 中的时间规则,cronsun 中的时间规则支持到秒级,比 crontab 多支持一位,cronsun 中支持多种时间格式。一个任务可以有多个定时器,主要是方便于多个节点在不同时间点执行同一个任务。

常用时间格式:

0  1   2   3   4   5
|    |    |    |    |    |
|    |    |    |    |    +------ day of week (0 - 6) (Sunday=0)
|    |    |    |    +------ month (1 - 12)
|    |    |    +-------- day of month (1 - 31)
|    |    +---------- hour (0 - 23)
|    +------------ min (0 - 59)
+-------------- sec (0-59)
字段名允许的值允许的特殊字符
Seconds0-59* / , -
Minutes0-59* / , -
Hours0-23* / , -
Day of month1-31* / , - ?
Month1-12 or JAN-DEC* / , -
Day of week0-6 or SUN-SAT* / , - ?

星号 ( * )

星号会匹配字段中的所有值,如在小时字段用了星号,表示每个小时都会匹配。

斜线 ( / )

匹配指定的数字,如 */3 在小时字段中等于 0,3,6,9,12,15,18,21 等被 3 整除的数。

逗号 ( , )

匹配分开的值,如 1,3,4,7,8 在小时字段中表示这里面的小时会匹配。

连词符 ( - )

匹配范围,例如:1-6,意思等同于 1,2,3,4,5,6

问题 ( ? )

在 day-of-month 或者 day-of-week 字段可代替 *

预定格式

EntryDescriptionEquivalent To
@yearly (or @annually)Run once a year, midnight, Jan. 1st0 0 0 1 1 *
@monthlyRun once a month, midnight, first of month0 0 0 1 * *
@weeklyRun once a week, midnight on Sunday0 0 0 * * 0
@daily (or @midnight)Run once a day, midnight0 0 0 * * *
@hourlyRun once an hour, beginning of hour0 0 * * * *

节点

执行任务的机器,需要部署 cronnode

节点分组

方便管理节点,如果在任务的定时器里选择某个节点分组,则表示任务会在这个节点分组的所有结点上运行。

故障节点

cronnode 出现问题的节点,一般情况下是 cronnode 服务挂掉,如果 etcd 的网络不好,也会临时出现故障节点。

离线节点

cronnode 服务正常关闭的结点。

正常结点

正常服务的结点。

日志

用于查询任务的执行结果,日志存储在 MongoDB 中,如果只想保存最新一段时间内的执行结果,可以使用 MongoDB 的 Capped Collections,在部署的时候创建一个名为 job_log 的 Capped Collection。

转载于:https://my.oschina.net/u/270037/blog/1305373

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值