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

、复制vendoryiisoftyii2consolecontrollersCacheController.php至consolecontrollersLuaGameTeamSkillController.php,如图1

复制vendoryiisoftyii2consolecontrollersCacheController.php至consolecontrollersLuaGameTeamSkillController.php

图1

2、将consolecontrollersLuaGameTeamSkillController.php重命名为consolecontrollersLuaGameTeamSkillController.php,如图2

将consolecontrollersLuaGameTeamSkillController.php重命名为consolecontrollersLuaGameTeamSkillController.php

图2

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

命名空间修改为namespace consolecontrollers;,类名修改为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 ‘yiiaseErrorException’ with message ‘exec() has been disabled for security reasons’,如图9

在根目录下运行 php yii,报错 PHP Warning 'yiiaseErrorException' 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

原文地址:https://www.cnblogs.com/iceman-/p/8898167.html