// +---------------------------------------------------------------------- namespace crmeb\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\console\input\Option; use think\console\Output; use Workerman\Worker; class Timer extends Command { /** * @var int */ protected $timer; /** * @var int|float */ protected $interval = 1; protected function configure() { // 指令配置 $this->setName('timer') ->addArgument('status', Argument::REQUIRED, 'start/stop/reload/status/connections') ->addOption('d', null, Option::VALUE_NONE, 'daemon(守护进程)方式启动') ->addOption('i', null, Option::VALUE_OPTIONAL, '多长时间执行一次,可以精确到0.001') ->setDescription('start/stop/restart 定时任务'); } protected function init(Input $input, Output $output) { global $argv; if ($input->hasOption('i')) $this->interval = floatval($input->getOption('i')); $argv[1] = $input->getArgument('status') ?: 'start'; if ($input->hasOption('d')) { $argv[2] = '-d'; } else { unset($argv[2]); } } protected function execute(Input $input, Output $output) { $this->init($input, $output); Worker::$pidFile = app()->getRootPath().'runtime/timer.pid'; $task = new Worker(); date_default_timezone_set('PRC'); $task->count = 1; $task->onWorkerStart = function () { event('CrontabListener'); }; $task->runAll(); } }