public function make_contract_pdf() { $taskModel = M('system_task'); // 标记超时的任务为停止运行 $taskModel->where(['is_run' => 1, 'updated' => ['elt', time() - 300]])->save(['is_run' => 0, 'remark' => '运行超时,自动终止!']); // 检测进程数是否已经满额 $max_task = 1; if ($taskModel->where(['is_run' => 1])->count() >= $max_task) { return; } // 设置不超时 set_time_limit(0); // 登记一下任务 $task_id = $taskModel->add(['created' => time(), 'is_run' => 1]); // 开始工作 $total = 0; $contractModel = new \Loan\Model\OrderContractModel(); while (true) { // 处理任务 $success_num = $contractModel->task(); // 若没有任务可处理,则休眠5秒钟再重试 if ($success_num < 1) { sleep(5); } $total += $success_num; // 任务被人为终止则退出循环 if ($taskModel->where(['id' => $task_id, 'is_run' => 1])->save(['updated' => time(), 'total_success' => $total, 'remark' => '最后更新时间:' . date('Y-m-d H:i:s')]) == 0) { break; } } // 告个别 $taskModel->where(['id' => $task_id])->save(['is_run' => 0, 'remark' => '任务手动退出']); }