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

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/250373.html

(0)
上一篇 2022年4月29日 21:47
下一篇 2022年4月29日 21:47

相关推荐

发表回复

登录后才能评论