cron-task

command module
v0.0.0-...-80b3c92 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2020 License: MIT Imports: 18 Imported by: 0

README

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即可

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
lib
job
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL