# soter-extension-cron **Repository Path**: snail/soter-extension-cron ## Basic Information - **Project Name**: soter-extension-cron - **Description**: Soter计划任务服务拓展 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2017-01-05 - **Last Updated**: 2022-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #拓展开发背景 在项目稍微复杂一些的项目当中,真个项目可能是多个语言配合完成不同的模块,其中计划任务是一种最常见的需求 平时大部分初级的做法就是利用Linux的crontab服务,这样的好处是,只需要我们自己编写定时执行的任务脚本即可, 但是维护就不是很方便了,每次变更任务都需要登录服务器手动crontab -e修改,这样做的弊端主要有两个: 1.每次都登录服务器,存在安全风险和不确定风险. 2.不能自动化. soter-extension-cron就是为了解决上面的两大难题,开发人员完全不需要接触服务器,变更计划任务只需要发布一 次代码即可. 推荐用supervisor管理soter-extension-cron服务,在服务器上启动了soter-extension-cron服务之后, 每次我们在项目里面变更了计划任务代码的时候,只需要重新发布代码到服务器上即可. #拓展介绍 soter-extension-cron是基于Soter实现的计划任务服务,可以周期性的执行Soter的task, 执行周期完全兼crontab,而且支持秒级别的. #环境要求 Linux PHP 5.3+ #安装拓展 1.下载拓展包zip文件,然后解压,比如解压后是:/home/soter/cron 2.复制文件夹cron到soter项目的application/packages/里面 3.启用cron,在入口文件里面修改addPackages,增加cron 比如下面: ```php /* 注册拓展包 */ ->addPackages(array( .... SOTER_PACKAGES_PATH . 'cron', ... )) ``` #使用拓展 1.按照上面的说明安装Soter Cron拓展. 2.创建task文件,比如:application/classes/Task/TestTask.php 然后在TestTask.php里面写正常的Soter的task即可. 3.创建配置文件,添加task到Soter Cron服务里面 比如:application/config/development/task.php 输入如下配置: ```php return array( 'php_bin' => '/usr/bin/php', //php命令路径 'enable' => true, //是否启用(总开关) 'tasks' => array( array( 'class' => 'TestTask', //task类名称不需要Task_前缀,还可以是task文件路径,比如:User/Score,就是类Task_User_Score. 'enable' => true, //是否启用task 'args' => '-f test -b demo --debug', //额外的传递给task的命令行参数 'pidfile' => '', //pid文件路径,留空会使用默认规则在storage下面生成pid文件 'cron' => '*/2 * * * * * *', //执行周期,六位写法,第一位是秒,后五位是标准的crontab五位写法;另外支持七位写法,最后一位是年 'log' => true, //是否记录日志 'log_path' => '/tmp/xxx.log', //日志文件路径 'log_size' => 2 * 1024* 1024, //日志最大大小,单位字节 ), ) ); ``` ``` cron表达式结构: * * * * * * * - - - - - - - | | | | | | | | | | | | | + 年 [optional] | | | | | +----- 周的第几天 (0 - 7) (Sunday=0 or 7) | | | | +---------- 月 (1 - 12) | | | +--------------- 月的第几天 (1 - 31) | | +-------------------- 小时 (0 - 23) | +------------------------- 分钟 (0 - 59) +------------------------------ 秒 (0 - 59) ``` 3.启动服务SoterCron服务 执行命令: php index.php --task=SoterCronService --evn=development 即可,如果没问题,可以后台执行这个命令. 那么Soter Cron会自动扫描"Soter包"配置目录下面当前环境文件夹里面的task.php文件 如果我们不想用task.php这个名字,可以通过-c 参数指定新的名字,比如:php index.php --task=SoterCronService -c mytask 那么Soter Cron会自动扫描"Soter包"配置目录下面当前环境文件夹里面的mytask.php文件 4.当文件task.php发生变化的时候Soter Cron会自动重新加载. 全部参数说明: --task 计划任务服务名称,固定是SoterCronService --evn 环境参数,可以是的velopment,testing,production,对应配置文件夹下面的子目录名称 -c task配置文件名称,默认是task. --disable-application 设置了此参数那么就会禁用主项目的计划任务. --hmvc-disable-all 设置了此参数那么就会禁用所有hmvc项目的计划任务. --hmvc-enable 设置只启用这些hmvc项目的计划任务,值是hmvc项目的模块名称,多个用逗号分割.比如:Demo,User --hmvc-disable 设置需要禁用的hmvc项目的计划任务,,值是hmvc项目的模块名称,多个用逗号分割.比如:Demo,User