没有不值得去解决的问题,也没有不值得去学习的技术!

基于 Yii 2.0 高级模版的控制台命令实现定时任务的流程

使用linux flock 文件锁实现任务锁定,重新编辑,表示每10秒钟执行一次,保存

1、复制\vendor\yiisoft\yii2\console\controllers\CacheController.php至\console\controllers\LuaGameTeamSkillController.php,如图1

复制\vendor\yiisoft\yii2\console\controllers\CacheController.php至\console\controllers\LuaGameTeamSkillController.php
图1

2、将\console\controllers\LuaGameTeamSkillController.php重命名为\console\controllers\LuaGameTeamSkillController.php,如图2

将\console\controllers\LuaGameTeamSkillController.php重命名为\console\controllers\LuaGameTeamSkillController.php
图2

3、命名空间修改为namespace console\controllers;,类名修改为LuaGameTeamSkillController,如图3

命名空间修改为namespace console\controllers;,类名修改为LuaGameTeamSkillController
图3

4、仅保留actionIndex(),其他方法删除,如图4

仅保留actionIndex(),其他方法删除
图4

5、在Windows PowerShell中,进入程序根目录,运行 ./yii,,会给你一些可用的命令列表,其中增加了可用命令 lua-game-team-skill,如图5

在Windows PowerShell中,进入程序根目录,运行 ./yii,,会给你一些可用的命令列表,其中增加了可用命令 lua-game-team-skill
图5

6、使用退出代码是控制台应用程序开发的最佳做法。通常,执行成功的命令会返回 0(Controller::EXIT_CODE_NORMAL),执行失败返回1(Controller::EXIT_CODE_ERROR),如图6
const EXIT_CODE_NORMAL = 0;
const EXIT_CODE_ERROR = 1;

使用退出代码是控制台应用程序开发的最佳做法。通常,执行成功的命令会返回 0(Controller::EXIT_CODE_NORMAL),执行失败返回1(Controller::EXIT_CODE_ERROR)
图6

7、运行 ./yii lua-game-team-skill,成功运行,如果在执行过程中提供的路由不包含路由的方法ID,将执行默认操作,即actionIndex()方法,如图7

运行 ./yii lua-game-team-skill,成功运行,如果在执行过程中提供的路由不包含路由的方法ID,将执行默认操作,即actionIndex()方法
图7

8、程序上传至CentOS 7上,在根目录下运行yii,报错-bash: yii: command not found,如图8

程序上传至CentOS 7上,在根目录下运行yii,报错-bash: yii: command not found
图8

9、在根目录下运行 php yii,报错 PHP Warning ‘yii\base\ErrorException’ with message ‘exec() has been disabled for security reasons’,如图9

在根目录下运行 php yii,报错 PHP Warning 'yii\base\ErrorException' with message 'exec() has been disabled for security reasons'
图9

10、编辑php.ini文件,查找disable_functions,删除exec,保存,如图10

编辑php.ini文件,查找disable_functions,删除exec,保存
图10

11,重启php-fpm,再次运行php yii,成功显示可用命令列表,lua-game-team-skill命令已经存在,如图11

重启php-fpm,再次运行php yii,成功显示可用命令列表,lua-game-team-skill命令已经存在
图11

12、运行 php yii lua-game-team-skill,如图12

运行 php yii lua-game-team-skill
图12

13、运行命令成功后,在Redis中生成相应数据,如图13

运行命令成功后,在Redis中生成相应数据
图13

14、使用CronTab定时执行php,执行命令,crontab -e,之后就会打开一个文件,如图14

使用CronTab定时执行php,执行命令,crontab -e,之后就会打开一个文件
图14

15、在文件中添加如下内容,表示每分钟执行一次,保存,如图15
*/1 * * * * /usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill

在文件中添加如下内容,表示每分钟执行一次,保存
图15

16、使用linux flock 文件锁实现任务锁定,重新编辑,保存,如图16
*/1 * * * * flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’

使用linux flock 文件锁实现任务锁定,重新编辑,保存
图16

17、查看/tmp/目录,sleep.lock文件存在,如图17

查看/tmp/目录,sleep.lock文件存在
图17

18、使用linux flock 文件锁实现任务锁定,重新编辑,表示每10秒钟执行一次,保存,如图18
* * * * * flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’
* * * * * sleep 10; flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’
* * * * * sleep 20; flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’
* * * * * sleep 30; flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’
* * * * * sleep 40; flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’
* * * * * sleep 50; flock -xn /tmp/sleep.lock -c ‘/usr/local/php/bin/php /data/wwwroot/api.kaiqiu.shuijingwanwq.com/yii lua-game-team-skill’

使用linux flock 文件锁实现任务锁定,重新编辑,表示每10秒钟执行一次,保存
图18

PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理