繁体   English   中英

如何防止laravel Scheduler在Cron作业完成之前运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM