新增守护控制选项

This commit is contained in:
JaguarJack 2020-07-09 21:56:17 +08:00
parent c84d5a2a17
commit b8de40a60f
2 changed files with 47 additions and 16 deletions

View File

@ -4,10 +4,11 @@ declare (strict_types = 1);
namespace catcher\command; namespace catcher\command;
use catcher\library\crontab\ManageProcess; use catcher\library\crontab\Master;
use think\console\Command; use think\console\Command;
use think\console\Input; use think\console\Input;
use think\console\input\Argument; use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output; use think\console\Output;
class CatchScheduleCommand extends Command class CatchScheduleCommand extends Command
@ -17,36 +18,44 @@ class CatchScheduleCommand extends Command
// 指令配置 // 指令配置
$this->setName('catch:schedule') $this->setName('catch:schedule')
->addArgument('option', Argument::OPTIONAL, '[start|reload|stop|restart||status]', 'start') ->addArgument('option', Argument::OPTIONAL, '[start|reload|stop|restart||status]', 'start')
->addOption('daemon', '-d', Option::VALUE_NONE, 'daemon mode')
->setDescription('start task schedule'); ->setDescription('start task schedule');
} }
protected function execute(Input $input, Output $output) protected function execute(Input $input, Output $output)
{ {
$process = new ManageProcess(); if (!extension_loaded('swoole')) {
$option = $input->getArgument('option'); $output->error('Swoole Extension Not Installed! You can use [pecl] to install swoole');
$this->{$option}($process); } else {
$master = new Master();
if ($this->input->hasOption('daemon')) {
$master->daemon();
}
$this->{$input->getArgument('option')}($master);
}
} }
/** /**
* 进程启动 * 进程启动
* *
* @time 2020年07月07日 * @time 2020年07月07日
* @param ManageProcess $process * @param Master $process
* @return void * @return void
*/ */
protected function start(ManageProcess $process) protected function start(Master $process)
{ {
$process->start(); $process->start();
$this->output->info($process->renderProcessesStatusToString());
} }
/** /**
* 状态输出 * 状态输出
* *
* @time 2020年07月07日 * @time 2020年07月07日
* @param ManageProcess $process * @param Master $process
* @return void * @return void
*/ */
protected function status(ManageProcess $process) protected function status(Master $process)
{ {
$process->status(); $process->status();
@ -57,10 +66,10 @@ class CatchScheduleCommand extends Command
* 停止任务 * 停止任务
* *
* @time 2020年07月07日 * @time 2020年07月07日
* @param ManageProcess $process * @param Master $process
* @return void * @return void
*/ */
protected function stop(ManageProcess $process) protected function stop(Master $process)
{ {
$process->stop(); $process->stop();
} }
@ -69,10 +78,10 @@ class CatchScheduleCommand extends Command
* 重启任务 * 重启任务
* *
* @time 2020年07月07日 * @time 2020年07月07日
* @param ManageProcess $process * @param Master $process
* @return void * @return void
*/ */
protected function reload(ManageProcess $process) protected function reload(Master $process)
{ {
$process->reload(); $process->reload();
} }
@ -81,10 +90,10 @@ class CatchScheduleCommand extends Command
* 重启 * 重启
* *
* @time 2020年07月07日 * @time 2020年07月07日
* @param ManageProcess $process * @param Master $process
* @return void * @return void
*/ */
protected function restart(ManageProcess $process) protected function restart(Master $process)
{ {
$process->stop(); $process->stop();

View File

@ -65,6 +65,11 @@ class Master
*/ */
protected $master_start_at; protected $master_start_at;
/**
* @var bool
*/
protected $daemon = false;
// 版本 // 版本
const VERSION = '1.0.0'; const VERSION = '1.0.0';
@ -82,7 +87,9 @@ class Master
public function start() public function start()
{ {
// 守护进程 // 守护进程
//Process::daemon(true, false); if ($this->daemon) {
Process::daemon(true, false);
}
// alarm 信号 // alarm 信号
// Process::alarm(1000 * 1000); // Process::alarm(1000 * 1000);
// 1s 调度一次 // 1s 调度一次
@ -129,7 +136,7 @@ class Master
{ {
return function () { return function () {
$schedule = new Schedule(); $schedule = new Schedule();
$schedule->command('catch:cache')->everyTenSeconds(); $schedule->command('catch:cache')->everyThirtySeconds();
foreach ($schedule->getCronTask() as $cron) { foreach ($schedule->getCronTask() as $cron) {
if ($cron->can()) { if ($cron->can()) {
@ -243,6 +250,8 @@ class Master
$this->initLog(); $this->initLog();
file_put_contents($this->getSaveProcessStatusFile(), '');
$this->createTable(); $this->createTable();
} }
@ -268,4 +277,17 @@ class Master
'default' => 'schedule', 'default' => 'schedule',
], 'log'); ], 'log');
} }
/**
* 开启 debug
*
* @time 2020年07月09日
* @return $this
*/
public function daemon()
{
$this->daemon = true;
return $this;
}
} }