cron-task
介绍
基于Unix Cron时间格式的计划任务
任务具备如下特征:
1、支持秒级别定时任务,可按照unix cron时间格式设定任务计划时间
2、单次计划任务支持设定并发实例,当所有实例结束任务才算完成,并退出
3、可设置任务的执行前后计划是否排他,即本次计划未完成,新计划不能开始,可等待或选择失败退出
配置及使用说明
构建自己的toml配置文件
[system]
[httpServer]
listenAddr = ":9091" #http服务启动的监听地址
storage = "redis" #local为本地存储map,redis为分布式存储,关联redis配置
[authorize]
mode = "none" # none - 不开启校验,file -文件模式,读取下面的users列表
authKey = "mysoft" #默认授权key
users = ["yangzhen22:111","li4:abc"] #格式说明 `name:password:authkey`,如果只有`name:password`则authkey为默认
#排他锁设置,配合exclusive = true使用
[locker]
lockerType = "redis" # mutex-内存互斥锁,channel-内存互斥锁支持可控锁等待,redis - 分布式锁支持可控锁等待
lockerWait = false #锁等待,false则表示加锁失败则返回,对于mutex无效
#当且仅当lockerType = redis有效
[redis]
addr = "127.0.0.1:6379"
password = ""
db = 0
#任务设置
[tasks]
[tasks.test1]
taskType = 1 #1为命令行,2为http请求
cron = "0 */1 * * * *" # 支持unix crontab格式
instances = 5 # 任务运行时支持的并行实例
exclusive = true #是否排他任务,开启排他锁则同一类任务执行是排他的
name = "test1"
runEnv = "php56" #运行环境,这里是指运行
path = "/Users/yangzhen/Desktop/PHP_CODE/apps/yii"
args = ["test/cron"]
配置参数说明
参数 |
说明 |
备注 |
system |
全局配置 |
--- |
locker |
锁配置 |
-- |
redis |
redis配置 |
-- |
tasks |
任务节点配置 |
--- |
备注:
tasks节点说明
参数 |
说明 |
备注 |
taskType |
任务类型 |
1-命令行模式,2-Http模式(暂未开放) |
cron |
计划时间 |
格式如:*/1 * * * * * |
instances |
并发实例 |
当次计划任务执行时,可设置并发实例数 |
exclusive |
是否排他 |
前后两次计划任务可设置排他性 |
name |
任务名称 |
设定任务执行的名字,可重复 |
runEnv |
运行环境 |
如php,/usr/local/bin/php,命令行可执行程序 |
path |
执行路径 |
如/webser/www/apps/yii |
args |
运行参数集合 |
["test/cron"] |
补充说明:
1、关于设置instances
设置该值影响的是当前计划任务开启的并发进程数,最终将开启协程等待直至所有协程结束,当前计划才会退出。也就是说这个是单机的
物理行为,和分布式并发意义不同;
2、关于设置exclusive排他属性
存在这样的场景,计划任务的执行是需要保持唯一性,即需要某次执行前加锁,执行完后解锁,临近的下次开始前会先检查锁,如果锁存
在则不执行。这里等待结束下次执行,有两种策略:
1、检查加锁失败,立刻返回,结束计划开始的新任务;
2、加锁失败,立刻执行"锁等待",即当前计划并未结束,只是在排队等待机会;
锁等待的优劣:
优点:等待锁的计划任务,会在解锁第一时间抢锁然后立刻执行,与立即返回的计划任务相比,任务执行会更紧凑;
缺点:锁等待会导致大量的计划任务无法顺利执行而排队,造成系统消耗,必须保证锁等待只能有且仅有一个等待,其余抛弃机制;
3、关于runEnv,path,args的使用说明
当前计划任务是命令行模式时(taskType=1),runEnv为当前应用程序的可执行命令,如php类型脚本肯定就是php的系统命令运行位置,
path为需要执行的脚本位置,args则是运行脚本需要的参数列表,以PHP的YII框架为例,我们设置如下:
/usr/local/bin/php /webser/www/apps/yii test/cron 对应的 三个参数为
runEnv=/usr/local/bin/php ,path=/webser/www/apps/yii, args=["test/cron"]
启动说明
单独启动主程序启动附带参数
-h 参数说明
-c 配置路径 ,使用如 -c="/tmp/config.toml"
借助monitor.sh脚本启动
bash monitor.sh (start|stop|reload|restart)
start 启动服务
stop 停止服务,需要再次输入确认 0 为立刻停止,可能会破坏正在执行的计划任务;1 等待退出,当且仅当所有已经在运行的计划结束,
主程序才退出
reload|restart 先stop,再start,注意stop是选择1的前提下,这种是非暴力重启
注意,vi打开sh文件,根据实际情况修改如下三行
execFile=$(pwd)/cron ,当前编译的文件名,默认是写当前sh同级目录。
logPath=$(pwd)/cron.log , 服务程序console输出的日志存放地儿,建议选择/tmp下。
configPath=$(pwd)/config.toml ,启动需要配置文件地址,这里可以先填写。
配置完上面的内容,则可以每次直接修改config.toml内容再reload|restart即可