[英]How to prevent laravel scheduler from running before the cron job is finished
我已经创建了运行cron作业的调度程序。 我的代码:
protected function schedule(Schedule $schedule)
{
$user = User::first();
$schedule->job((new SoapRequest)->checkStatusApplication($user))->everyMinute();
}
任务是对Web服务进行肥皂调用以检查应用程序状态更改
这是我的SoapRequest
类中的方法checkStatusApplication
,该方法执行soap调用来检查:
<?php
namespace App\ClientRequests;
use App\User;
use SoapClient;
use SoapFault;
use SoapParam;
use SoapVar;
class SoapRequest
{
protected $password = config('application.password');
protected $wsdl;
protected $soapClient;
public function __construct()
{
$this->soapClient = $this->makeSoapClient();
}
private function makeSoapClient()
{
return new SoapClient($this->wsdl, [
'local_cert' => base_path('storage/')
'passphrase' => $this->password,
'soap_version' => SOAP_1_1,
'trace' => 1,
]);
}
public static function checkStatusApplication(User $user)
{
$init = new self;
$params = $init->makeSoapParams($init->makeXML($user));
$response = $init->request('SubmitV2', [$params]);
return $response;
}
private function request($functionName, $params)
{
try {
return $this->soapClient->__soapCall($functionName, $params);
} catch (SoapFault $e) {
log_system(' fial: ', $this->soapClient->__getLastResponse());
dd($e->getMessage());
}
}
}
INFO`:应该在后台运行此作业。
我的要点是:我想从数据库中获取所有状态未获批准的用户,并在Web服务的后台进行肥皂调用,
问题假设我有200位用户需要检查状态更改。
问题 *如果有200个用户说我的第三个请求我遇到异常或api服务器关闭,其他请求/调度程序或如何处理该请求的任何想法,以及如何确保调度程序不会运行该怎么办?再次直到我的所有请求都完成,例如api的超时时间。
注意我想每分钟运行一次调度程序
通过使用withoutOverlapping
方法,您应该能够防止任务重叠。
$schedule->job((new SoapRequest)->checkStatusApplication($user))->everyMinute()->withoutOverlapping();
https://laravel.com/docs/5.5/scheduling#preventing-task-overlaps
默认情况下,即使任务的先前实例仍在运行,计划的任务也将运行。 为防止这种情况,可以使用noOverlapping方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.