fixed:修复定时任务立即执行导致任务执行混乱

This commit is contained in:
JaguarJack 2021-02-08 10:25:03 +08:00
parent d8496f9e62
commit 84c85c3d12
4 changed files with 18 additions and 19 deletions

View File

@ -96,13 +96,14 @@ class ScheduleCommand extends Command
{ {
$executeAbleCommands = []; $executeAbleCommands = [];
Crontab::where('status', Crontab::ENABLE) Crontab::where('status', Crontab::ENABLE)
->where('tactics', '<>', Crontab::EXECUTE_FORBIDDEN)
->select() ->select()
->each(function ($command) use (&$executeAbleCommands){ ->each(function ($command) use (&$executeAbleCommands){
if ($command->tactics == Crontab::EXECUTE_IMMEDIATELY) { if ($command->tactics == Crontab::EXECUTE_IMMEDIATELY) {
$executeAbleCommands[] = $command; $executeAbleCommands[] = $command;
return true; $command->tactics = Crontab::EXECUTE_NORMAL;
return $command->save();
} }
$can = date('Y-m-d H:i', $can = date('Y-m-d H:i',
@ -113,9 +114,8 @@ class ScheduleCommand extends Command
if ($can) { if ($can) {
// 如果任务只执行一次 之后禁用该任务 // 如果任务只执行一次 之后禁用该任务
if ($command->tactics === Crontab::EXECUTE_ONCE) { if ($command->tactics === Crontab::EXECUTE_ONCE) {
Crontab::where('id', $command->id)->update([ $command->tactics = Crontab::DISABLE;
'status' => Crontab::DISABLE, $command->save();
]);
} }
$executeAbleCommands[] = $command; $executeAbleCommands[] = $command;

View File

@ -47,7 +47,7 @@ class Crontab extends CatchController
*/ */
public function save(Request $request) public function save(Request $request)
{ {
CronExpression::factory($request->post('cron')); new CronExpression($request->post('cron'));
return CatchResponse::success($this->model->storeBy($request->post())); return CatchResponse::success($this->model->storeBy($request->post()));
} }
@ -73,7 +73,7 @@ class Crontab extends CatchController
*/ */
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
CronExpression::factory($request->post('cron')); new CronExpression($request->post('cron'));
return CatchResponse::success($this->model->updateBy($id, $request->post())); return CatchResponse::success($this->model->updateBy($id, $request->post()));
} }

View File

@ -34,7 +34,7 @@ class Crontab extends Migrator
->addColumn('group', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 默认 2 系统',]) ->addColumn('group', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 默认 2 系统',])
->addColumn('task', 'string', ['limit' => 255,'null' => false,'default' => '','signed' => false,'comment' => '任务名称',]) ->addColumn('task', 'string', ['limit' => 255,'null' => false,'default' => '','signed' => false,'comment' => '任务名称',])
->addColumn('cron', 'string', ['limit' => 50,'null' => false,'default' => '','signed' => false,'comment' => 'cron 表达式',]) ->addColumn('cron', 'string', ['limit' => 50,'null' => false,'default' => '','signed' => false,'comment' => 'cron 表达式',])
->addColumn('tactics', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 立即执行 2 执行一次 3 放弃执行',]) ->addColumn('tactics', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 立即执行 2 执行一次 3 正常执行',])
->addColumn('status', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 正常 2 禁用',]) ->addColumn('status', 'boolean', ['null' => false,'default' => 1,'signed' => false,'comment' => '1 正常 2 禁用',])
->addColumn('remark', 'string', ['limit' => 1000,'null' => false,'default' => '','signed' => false,'comment' => '备注',]) ->addColumn('remark', 'string', ['limit' => 1000,'null' => false,'default' => '','signed' => false,'comment' => '备注',])
->addColumn('creator_id', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '创建人ID',]) ->addColumn('creator_id', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '创建人ID',])

View File

@ -38,6 +38,5 @@ class Crontab extends Model
const EXECUTE_IMMEDIATELY = 1; // 立即执行 const EXECUTE_IMMEDIATELY = 1; // 立即执行
const EXECUTE_ONCE = 2; // 执行一次 const EXECUTE_ONCE = 2; // 执行一次
const EXECUTE_FORBIDDEN = 3; // 停止执行 const EXECUTE_NORMAL = 3; // 正常执行
} }