有时候我们定时执行任务的需求,也可能是为了性能,也有可能是需求,不管如何,我们如何在TP5中配合计划任务完成这一功能呢?
下面是我的使用到定时上传文件到ftp的一个记录:
步骤1
在application下创建command文件夹
application/command
步骤2
然后再创建自己的Command类,如下
class Uploadftp extends Command{
/**
* 初始化
* @param Input $input An InputInterface instance
* @param Output $output An OutputInterface instance
*/
protected function initialize(Input $input, Output $output)
{
// 读取数据库配置文件
$filename = ROOT_PATH . 'application/config/prod_database.php';
Config::load($filename, 'database');
}
/**
* 配置指令
*/
protected function configure()
{
$this->setName('Uploadftp')->setDescription('定时更新Token的icon到远程的ftp服务器');
}
/**
* 执行指令
* @param Input $input
* @param Output $output
* @return null|int
* @throws \LogicException
* @see setCode()
*/
protected function execute(Input $input, Output $output)
{
$output->writeln('开始执行上传ftp操作...',json_encode($input->getOptions()));
$this->upload2fpts($output);
$output->writeln('执行完毕!');
}
public function upload2fpts(Output $output){
//逻辑代码
}
}
注意点
因为我们使用到了多环境配置文件,所以如果我们要使用数据库的话,我们要在初始化的时候,重新进行数据库的配置读取,这一点一定要注意。如下:
// 读取数据库配置文件
$filename = ROOT_PATH . 'application/config/prod_database.php';
Config::load($filename, 'database');
步骤3
在command.php中添加我们的Command子类
return [
'app\command\Uploadftp'
];
步骤4
测试:
项目根目录下,think的php脚本,如果我们执行php think 的话,会打印我们配置的Command,这里是Uploadftp
我们切到项目根目录,执行 php think Uploadftp 会看到已经执行了我们的Commnad类中的逻辑
步骤5
添加计划任务
在linux环境下,添加计划任务
crontab -e
*/10 * * * * php /data/web/project/think Uploadftp
//编辑多长时间,或者计划的任务的规则,保存,我们这里是10分钟执行一次
可以使用crontab -l 查看任务
tail -f /var/log/cron //查看最新的日志
暂无评论
要发表评论,您必须先 登录