功能基于EasyTask+ThinkPHP自定义指令开发,详情可以参考:
首先安装相关服务composer require easy-task/easy-task
功能Test代码<?php
/**
* @desc EasyTask 测试 php think test start --taskcommand timego
* @author wolfcode
* @url wolfcode.net
* @支持常驻内存的PHP定时任务快捷命令
*/
namespace app\command;
use EasyTask\Task;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
class Test extends Command
{
protected function configure()
{
$this->setName('Test')
->addArgument('argv', Argument::OPTIONAL, "your argv")
->addOption('force', NULL, Option::VALUE_REQUIRED, 'your force')
->addOption('taskcommand', NULL, Option::VALUE_REQUIRED, 'your taskcommand')
->setDescription('测试专用');
}
protected function execute(Input $input, Output $output)
{
$argv = trim($input->getArgument('argv'));
$force = $input->hasOption('force') ?: false;
$taskcommand = $input->hasOption('taskcommand') ? $input->getOption('taskcommand') : "empty";
$task = new Task();
switch ($taskcommand) {
case 'timego':
$task->addFunc(function () {
$now = date("Y-m-d H:i:s");
echo "[{$now}] It's timego now" . PHP_EOL;
}, $taskcommand, 10, 2); // 1.添加闭包函数类型定时任务(开启2个进程,每隔10秒执行1次)
break;
default:
$task->addFunc(function () {
$now = date("Y-m-d H:i:s");
echo "[{$now}] it is empty taskcommand now " . PHP_EOL;
}, $taskcommand, 30, 1); // 1.添加闭包函数类型定时任务(开启1个进程,每隔30秒执行1次)
}
switch ($argv) {
case 'start':
//初始化
$task->start();
// 设置非常驻内存
$task->setDaemon(false);
// 设置项目名称
$task->setPrefix('EasyTask');
// 设置记录运行时目录(日志或缓存目录)
$task->setRunTimePath(root_path() . 'runtime' . DIRECTORY_SEPARATOR);
$output->writeln("EasyTask start {$taskcommand}");
break;
case 'status':
$task->status();
$output->writeln("EasyTask status {$taskcommand}");
break;
case 'stop':
$task->stop($force);
$output->writeln("EasyTask stop {$force} {$taskcommand}");
break;
default:
exit('argv is not exist' . PHP_EOL);
}
return true;
}
}
在项目 config/console.php 中的'commands'中注册命令
启用内置命令启动php think test start
效果如下:
执行timego:php think test start --taskcommand timego
效果如下:
参数:
pid:任务进程
id name:任务别名
started:任务启动时间
time:任务执行时间
status:任务状态
ppid:守护进程id
启动任务: php console.php start
查询任务: php console.php status
普通关闭: php console.php stop
强制关闭: php console.php stop force