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

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

图1

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

图2

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

图3

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

图4

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

图5

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

图6

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

图7

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

图8

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

图9

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

图10

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

图11

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

图12

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

图13

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

图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’

图16

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

图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’

图18

永夜