thinkphp5.0支持console应用,可以通过自定义命令行执行对应的程序。
第一步:在应用目录application下面的任意模块下创建command目录,command目录下创建Test.php,即:
<?php
namespace app\index\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;
class Test extends Command
{
// 配置定时器的信息
protected function configure()
{
$this->setName('test')
->setDescription('Command Test');
}
protected function execute(Input $input, Output $output)
{
// 输出到日志文件
$output->writeln("TestCommand:");
// 定时器需要执行的内容
// .....
$output->writeln("end....");
}
}
第二步:在application下的command.php添加命令配置,执行命令的时候thinkphp会读取这个配置文件
return ['app\admin\command\Test'];
第三步:项目根目录下有一个think文件,没有此文件就新建一个,文件名无所谓。内容如下:
<?php
// 定义项目路径
define('APP_PATH', __DIR__ . '/application/');
// 加载框架引导文件
require './thinkphp/console.php';
然后就可以在根目录执行命令:php think
整个过程中有两点需要注意:
1,Test.php文件名的大小写
2,当时我的项目根目录中没有think文件,而应用目录是app。在新建think文件,里面的内容是复制进去的,没有仔细看,
定义项目应用路径是:define('APP_PATH', __DIR__ . '/application/'); 所以命令始终出不来,改成app之后就好了。
第四步:添加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路径加入都临时变量中
cd /home/wwwroot/项目根目录/ # 进入项目的根目录下,保证可以运行php think的命令
php think test # 执行在Test.php设定的名称
其他命令直接往后加就行了。
第四步:使用crontab设置定时器
有两种方式设置定时器,第一种输入命令 crontab -e
0 0 * * * /home/wwwroot/项目根目录/crond.sh
第二种输入命令:vim /etc/crontab , 在文件后面加上
0 0 * * * root /home/wwwroot/项目根目录/crond.sh
定时设置可以自行百度,根据自己需求进行合理的设置。
重启crontab服务
service crontab restart