基于 Yii 2.0 的后台任务管理 [ 1.0 版本 ]
刚接触yii框架不久,公司也不用yii,但是就是很喜欢yii框架,平时没事做就用yii写点小东西,前段时间写了很多后台脚本,用crontab管理起来太麻烦了,所以想搞一个后台任务管理,简单的添加就能跑起来。
所以有了想法以后,一般第一思路就是百度一下,有没有类似的扩展,有现成的不用白不用,对吧。但是百度一番并没有,这就尴尬了......不过也找到了一个例子,思路跟我想的也差不多,所以连抄带搬,再优化一下,我就是一个菜鸟!!!
参考例子
话不多说(好像说了很多废话),下面把设计的思路理一遍,还是有很多坑的,上面例子的代码直接粘贴到项目里,基本上不能跑起来吧,毕竟服务器的配置都有差异......
思路:
利用crontab来创建主进程,并且每隔三分钟执行一次(避免服务器意外关机、重启,主进程意外中 止......)
主进程:
(1)检查主进程是否再运行,没有就启动,有就退出
(2)检查是否有执行超时的任务,有就杀掉进程,并写入日志
(3)检查任务表,是否有需要执行的任务,有就执行,如果产生错误就写入日志
设计:一个主进程控制器类,两个模型类(任务模型、日志模型),两个工具类(进程类、写日志类),两个 公共的控制器类(分web、console)
功能:限制ip访问、前台添加任务,主进程循环扫描任务列表,执行任务,创建的任务可以是yii控制台的脚 本,也可以是web端的脚本,错误写入日志,默认是在runtime下以日期命名
截图:
任务列表:
创建:
修改:
运行日志:
错误日志:
说明:
- 添加yii控制台的脚本program直接写<控制器/方法>,并且必须继承ConsoleBaseController这个类,如果执 行web端的脚本,program就得写完成的url,因为用的wget,且需继承WebBaseController这个类,不继承的 话无法判断任务是否执行成功。
- 用到了
file_put_content
,所以保证nginx
或者apache
用户有足够的权限,如果权限不足的话就在/etc/sudoers
里添加:nginx ALL=(ALL) NOPASSWD:ALL(好像是这样写的,具体找度娘)
- runtime目录权限给够
- 允许访问的 IP 添加到 params 里,格式为
'TaskAllowedIPs' => [],
- 只能在 linux 机器上运行!!!
gitHub地址:
https://github.com/huangdingbo/taskManager
发这篇文章的主要目的还是交流,学习,如果大家有跟好的想法和设计思路,请给我留言,让菜鸟成长一下,谢谢!
huangdingbo 四川成都
最后登录:2020-11-26
在线时长:4小时34分
- 粉丝2
- 金钱40
- 威望10
- 积分180
共 3 条评论
这个是模仿XXL-JOB吧
我还不知道有这个东西,刚看了一下,是好东西啊 哈哈
致作者
frontend\controllers的
命名空间是namespace backend\controllers
目录却是frontend,且继承的是extends BackendController,应该跑不起来吧
另 frontend\views\task\index.php
应用 use \backend\models\TaskToolModel;
如下:
use yii\bootstrap\Modal; use yii\helpers\Html; use yii\grid\GridView; use yii\helpers\Url; use \backend\models\TaskToolModel;
没有跟踪到 backend\models\TaskToolModel