-
Notifications
You must be signed in to change notification settings - Fork 457
任务配置
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
,修改open
为true
开启此限制,那么users
和ext
将会作为执行脚本的用户和后缀名限制白名单,只有脚本后缀和用户都在白名单中,任务才会被执行。
- 每个任务最终都会有一个结果,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 * * * * |