ThinkPHP项目中使用Crontab实现定时任务推送消息的详细教程
今天做项目的时候,每天早上需要使用定时任务给用户发送数据、推送消息。该项目是使用thinkphp构建的。但是tp5没有合适的方法。经过搜索,我得出的结论是使用crontab是最有效的方法。下面小编就给大家介绍一下它的使用方法。

#1.首先登录Linux服务器,crontab -l,使用service crond status查看运行状态。
查看crontab任务列表
显然,这个centos已经安装了crontab。如果系统没有安装,请自行安装并测试。
2.创建php文件(php脚本)
2.1 然后手动编写测试脚本。我在数据库中创建了一张表t,并设置了id自增和i字段;
数据表
2.2 创建php文件。这里我创建了一个1.php文件,代码如下:
$link = mysqli_connect(
'****', /* 连接MySQL的主机地址*/
'root', /* 作为 MySQL 用户名连接的用户 */
'****', /* 用于连接 MySQL 的密码 */
'数据库名称'); /* 查询连接数据库的默认数据库名称 */
如果(!$链接){
printf("无法连接到 MySQL 服务器。错误代码:%s ", mysqli_connect_error());
出口;
}别的{
$sql="插入 t(i) 值('123456')";
if ($link->query($sql) == TRUE) {
echo "插入成功";
} 别的 {
echo "插入失败";
/* 关闭连接 关闭连接 */
mysqli_close($link);
2.3 将修改后的文件上传到服务器目录。我这里上传的目录是/home/centos/1.php,然后检查权限是否为777,如果不是,chmod 777 /home/centos/1.php来更改权限。
3.使用crontab添加php定时任务
3.1 使用命令添加我们的定时任务
在控制台输入crontab -e。这时,我们就会进入vi编辑模式。按i键进入编辑模式,编写我们的计划任务。如果不小心输出错误:q!退出,:wq 保存!
前两个是系统自带的自动执行任务。新手不明白他们的意思。忽略他们。稍后我们将附加我们自己的计划任务代码。下面六行是每十秒执行一次php脚本。
*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
0 0 * * * /usr/local/qcloud/YunJing/YDcrontab.sh > /dev/null 2>&1 &
* * * * * /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 10; /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 20; /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 30; /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 40; /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 50; /usr/local/bin/php /home/centos/1.php
然后我们重新启动crontab,避免不执行。服务crond重启,然后观察我们的数据表是否正常插入数据。
注意事项
第一次运行,执行不成功。我到处寻找问题。看了操作日志,我不明白。如果这里执行失败,就要看三点:第一,文件权限,第二,php文件的路径,第三,php的安装路径。一定要小心。我的 /usr/local/bin/php 路径有错误。进入目录发现没有php.ini文件。
图片.png
当然,你可以使用which php命令来检查你自己的php路径,并确保它是准确的。
图片.png
将脚本修改为
* * * * * 睡眠 10; /usr/local/bin/php /home/centos/1.php
* * * * * 睡眠 20; /usr/bin/php /home/centos/1.php
* * * * * 睡眠 30; /usr/bin/php /home/centos/1.php
* * * * * 睡眠 40; /usr/bin/php /home/centos/1.php
* * * * * 睡眠 50; /usr/bin/php /home/centos/1.php
查看计划任务并重启计划任务
图片.png
查看我们的数据表,发现数据在不断地自动添加到表中,并且成功完成。
图片.png
crontab知识补充
分钟 小时 日 月 周 命令
在:
分钟:表示分钟,可以是 0 到 59 之间的任意整数。
hour:表示小时,可以是0到23之间的任意整数。
day:表示日期,可以是1到31之间的任意整数。
Month:表示月份,可以是1到12之间的任意整数。
week:表示一周中的第几天,可以是0到7之间的任意整数,其中0或7代表星期日。
command:要执行的命令可以是系统命令,也可以是自己写的脚本文件。