Skip to content

任务配置

Doflatango edited this page Mar 12, 2018 · 1 revision

任务类型

  • 普通任务:任务会在每一台指定的节点上面执行。
  • 单机单进程:任务会在所有指定的节点中选择其中一个节点来执行,并且同时有且只有一个任务进程在跑,直到本次任务执行结束。
  • 组级别普通任务:与单机单进程类型不一样的地方是,去除了同时有且只有一个任务进程在跑的限制,只要任务调度时间到,就会在某个节点上面开始另一个任务进程。

任务分组

任务分组只是出于方便管理的原因而添加的功能,在添加/修改任务时,可以选择已有的分组,或者直接在输入框填写新的分组名称来创建新分组,同时把任务分配给新分组。

任务脚本

  • 脚本:相当于 crontab 中的执行命令,复杂的或者需要管道支持的任务需要写成 shell 脚本。
  • 参数:脚本参数以空格作为分割符,其规则类似在终端中的使用,如果参数本身有空格,可以用 \ 对空格进行转义,或者使用'或"把单个参数包含起来,例如:
a.sh a\ a 'b\'b' "c c"
# 将会得到 a a、b'b、c c

如果参数比较复杂并且不确定规则,建议先建一个测试任务看看预期会得到的参数是怎么样的。

  • 后缀名与执行用户限制:打开配置文件 security.json,修改 opentrue 开启此限制,那么 usersext 将会作为执行脚本的用户和后缀名限制白名单,只有脚本后缀和用户都在白名单中,任务才会被执行。

执行结果

  • 每个任务最终都会有一个结果,cronsun 通过任务的 exit code 来判断任务执行是否成功,只有 exit code 为 0 时被认为任务是执行成功的。任务的结果会影响到一些配置,以及是否需要告警等,因此你需要正确的处理 exit code。

超时设置

  • 任务执行超过指定时间时将被强行结束,并且视为任务执行失败。

一个节点上面该任务并行数

  • 在同一时间内,同个节点上面最多可以有多少个相同任务进程一起执行。比如当你的任务执行一次需要 5 个小时,但是你设置了间隔 1 小时执行一次,那么大部分时间内都会有 4 个相同任务进程在执行,如果把此参数设置为 2,那么同一时间内只能有最多 2 个相同任务进程。

重试 & 重试间隔

  • 只在任务失败时用到,设置一个大于 0 的次数,在任务执行失败时,cronsun 会一直尝试再次执行,直到重试次数达到上限,或者任务执行成功了。
  • 重试间隔表示任务失败后,等待多久才开始重新下一次尝试。

日志存储 & 清除

  • 存储:目前 cronsun 会直接捕获并合并任务的 stdout 和 stderr 存储到 MongoDB,这个方式只适用于小量的日志,对于有大量日志输出的任务,你需要另外保存这个日志。
  • 清除:打开配置文件 web.json,修改 LogCleaner.EveryMinute 为一个大于 0 的数,比如 60,表示每隔 60 分钟定时清除一次过期日志,过期时间是通过 LogCleaner.ExpirationDays 来定义,设置 3,表示 3 天前的日志都是过期的,将会被清除。
  • 为任务单独设置过期时间:可能有些任务的日志比较重要,你想保存久一点,此时你可以在界面上面为任务单独设置过期时间。

定时器

  • 一个任务至少有一个定时器,定时器包含了任务执行的时间和节点;
  • 多个定时器之间共享上面的规则和限制;
  • 任务节点规则优先级:排除的节点 > 指定的节点 > 节点分组;
  • 调度规则:规则与 cron 一样,但是这里的设置有 6 段,支持秒级调用,请注意这一点;
0    1    2    3    4    5
|    |    |    |    |    |
|    |    |    |    |    +------ 星期 (0 - 6,星期天 = 0)
|    |    |    |    +------ 月 (1 - 12)
|    |    |    +-------- 日 (1 - 31)
|    |    +---------- 时 (0 - 23)
|    +------------ 分 (0 - 59)
+-------------- 秒 (0 - 59)
字段名 允许的值 允许的特殊字符
0 - 59 * / , -
0 - 59 * / , -
0 - 23 * / , -
1 - 31 * / , - ?
1 - 12 或 JAN-DEC * / , -
星期 0 - 6 或 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
  • ?: 在 或者 星期 字段可代替 *

预定格式:

预定项 描述 等价规则
@yearly (或 @annually) 每年执行一次, 每年 1 月 1 日 0 点开头执行 0 0 0 1 1 *
@monthly 每月执行一次, 每月 1 日 0 点开头执行 0 0 0 1 * *
@weekly 每周执行一次, 星期天 0 点开头执行 0 0 0 * * 0
@daily (或 @midnight) 每天执行一次, 每天 0 点开头执行 0 0 0 * * *
@hourly 每小时执行一次, 每小时 0 分开头执行 0 0 * * * *