ThinkPHP5实现定时器任务
方法一
1.在/application/command创建要配置的PHP类文件,需要继承Command类,并重写configure和execute两个方法,例如:
<?phpnamespace app\command;use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;class Hello extends Command
{protected function configure(){$this->setName('hello') //命令的名字("think" 后面的部分)->addArgument('name', Argument::REQUIRED, "your name") //必填参数->addArgument('last_name', Argument::OPTIONAL, 'Your last name?') //选填参数->addOption('city', 'c', Option::VALUE_OPTIONAL, 'city name') ->setDescription('Say Hello'); // 运行 "php think list" 时的简短描述->setHelp("This command allows you to create users..."); // 运行命令时使用 "--help" 选项时的完整命令描述}protected function execute(Input $input, Output $output){$name = trim($input->getArgument('name'));$name = $name ?: 'thinkphp';$other = trim($input->getArgument('last_name'));$other = $other ?: 'last';if ($input->hasOption('city')) {$city = PHP_EOL . 'From ' . $input->getOption('city');} else {$city = '';}$output->writeln("Hello," . $name .'last_name->'.$other. '!' . $city);}
}
直接进入网站根目录,命令行执行,就可看到效果
php think hello fujian min --city xiamen
2.修改application/command.php内容,加入上述的定时器内容
<?php
return ['application\command\Hello', // 加入需要cmd运行的PHP文件
];
3.添加shell执行文件
在项目根目录下创建shell脚本,例如crond.sh
#!/bin/sh
PATH=/usr/local/php/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 将php路径加入都临时变量中
# 如果你的PHP命令是已经配置了全局,可不需要上面这句
cd /home/wwwroot/域名/ # 进入项目的根目录下,保证可以运行php think的命令
php think hello xx # 执行在Hello.php设定的名称
注意:test 可执行命令是ThinkPHP自带的,可以通过 连接服务器,到/home/wwwroot/域名/ 目录下,输入 php think查询可以被执行的命令,如下:
4.使用crontab设置定时器
有两种方式,效果是一样的:
1.连接到服务器,输入 crontab -e,写入:
0 0 * * * /home/wwwroot/域名/crond.sh
注意:1).0 0 * * * 是crontab的定时表达式,表示每天的0点0分执行该文件,具体详情可以访问《crontab定时写法》进行学习。
2).可以使用crontab -l 的命令查看已登录的账户有几个定时器。
3).可以到 /var/log/cron 文件查看日志文件,便于追踪错误。
2.连接到服务器,输入 vim /etc/crontab, 初始化内容为:
在该文件写入
0 0 * * * root /home/wwwroot/域名/crond.sh
最终的查看的结果是:
最后保存该文件
5.重启crond服务
service crond restart
如果 该命令无法重启,请使用systemctl restart crond 进行重启
----------------------------------------------------------分隔线--------------------------------------------------------------
方法二,需要修改本文的前三步,后面均一致。
1).新增Controller类,并编写相对应的方法,例如:
以下是Test Controller类,还有一个简单的test方法。
<?phpnamespace app\demo\controller;use think\Controller;
use think\Log;class Test extends Controller
{public function test(){Log::error('start test crond demo.....');Log::error('end test crond demo.....');}}
访问test方法的路由:demo/test/test
2).添加shell执行文件
在项目根目录下创建shell脚本,例如crond.sh
#!/bin/sh
PATH=/usr/local/php/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 若配置全局PHP命令,可不需要上面这句
# 1.执行 php 命令不需要到thinkphp项目的目录下 2.index.php为入口文件 3.第三个参数为需要执行方法的路由
php /home/wwwroot/域名/index.php demo/test/test
后面的步骤从本文第4步开始,就可以完成定时功能。
第二种方法符合API引用的思维,可能比较容易理解,第一种是利用thinkPHP本身的一个功能,这两种都可以,看个人习惯。
ThinkPHP5实现定时器任务相关推荐
- php定时爬虫,thinkphp5使用workerman定时器定时爬取站点内容的代码
本篇文章给大家分享的内容是关于thinkphp5使用workerman定时器定时爬取某站点新闻资讯等的内容,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. 1.首先通过 composer ...
- ThinkPHP5中使用workman框架与硬件设备蓝牙锁通讯
通篇分为三大块:服务器.蓝牙锁.APP 先说服务器: 使用的是TP5.workman框架使用composer安装的 安装wm可直接参考TP5的官方手册,讲解的很细致https://www.kanclo ...
- 一文吃透JAVA定时器格式
JAVA 定时器时间格式 基本格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 , - ...
- Timer定时器开发
Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...
- thinkphp5.1 中间件是什么有什么用
中间件是什么?有什么作用? 中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理.---tp5.1手册 也就是说,降低了系统的耦合:[在http请求阶段,执行中间件的入口执行方法(hand ...
- linux定时器(crontab)实例
linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...
- c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式
原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...
- thinkphp5+远程代码执行_ThinkPHP5 5.0.23 远程代码执行漏洞
漏洞描述 ThinkPHP是一款运用极广的PHP开发框架.其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程 ...
- linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...
最新文章
- IOS设计模式第六篇之适配器设计模式
- (27)TLB番外篇——ShadowWalker
- [概述] SAP增强基本含义及分类
- 空格替换_O(n)方法
- 安装spark1.3.1单机环境
- adodb.stream对象的方法/属性
- python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式
- 下面是html5中新增的结构元素的是,HTML5的新的结构元素介绍
- asp exce l连接字符串_C++基础知识篇:C++ 字符串
- JavaSE----常用类(String、StringBuilder、StringBuffer)
- java哪个软件编程好学吗_自学编程:Java和C语言相比哪个好?哪个更值得学习?...
- [leetcode]208. 实现 Trie (前缀树)
- IJCAI最佳论文公布 华人斩获最佳学生论文奖!
- 【数学基础】机器学习中的几个熵
- 创新者的窘境 Teh Innovator‘s Dilemma
- 宠物管理系统mysql_基于java+MySQL的宠物管理系统
- .NET面试宝典130道经典面试真题及答案
- python中θ符号怎么打出来_Python打印特殊符号及对应编码解析
- icloud 照片同步_如何确保Mac和iPhone的照片同步到iCloud
- Docker安装ElasticSearch 版本7.6.2