|
@@ -11,6 +11,7 @@ use think\console\input\Argument;
|
|
|
use think\console\input\Option;
|
|
use think\console\input\Option;
|
|
|
use think\console\Output;
|
|
use think\console\Output;
|
|
|
use SixShop\System\Workerman\Worker as SixShopWorker;
|
|
use SixShop\System\Workerman\Worker as SixShopWorker;
|
|
|
|
|
+use Workerman\Crontab\Crontab;
|
|
|
use Workerman\Timer;
|
|
use Workerman\Timer;
|
|
|
use Workerman\Worker;
|
|
use Workerman\Worker;
|
|
|
|
|
|
|
@@ -60,7 +61,20 @@ class WorkerCommand extends Command
|
|
|
{
|
|
{
|
|
|
SixShopWorker::addWorker(
|
|
SixShopWorker::addWorker(
|
|
|
onWorkerStart: function (Worker $worker) {
|
|
onWorkerStart: function (Worker $worker) {
|
|
|
|
|
+ pcntl_signal(SIGQUIT, function () {
|
|
|
|
|
+ foreach (Crontab::getAll() as $crontab) {
|
|
|
|
|
+ /* @var Crontab $crontab */
|
|
|
|
|
+ $crontab->destroy();
|
|
|
|
|
+ Worker::safeEcho($crontab->getName().' destroyed'.PHP_EOL);
|
|
|
|
|
+ }
|
|
|
|
|
+ Timer::delAll();
|
|
|
|
|
+ Worker::stopAll();
|
|
|
|
|
+ });
|
|
|
$this->app->event->trigger(CrontabWorkerStartEvent::class, $worker);
|
|
$this->app->event->trigger(CrontabWorkerStartEvent::class, $worker);
|
|
|
|
|
+ // 心跳兜底,每秒一次
|
|
|
|
|
+ new Crontab('*/1 * * * * *', function () {
|
|
|
|
|
+ pcntl_signal_dispatch();
|
|
|
|
|
+ }, 'signal-heartbeat');
|
|
|
},
|
|
},
|
|
|
name: 'crontab',
|
|
name: 'crontab',
|
|
|
count: 1,
|
|
count: 1,
|