账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Laravel定时任务重复执行
    79
    0

    Laravel定时任务执行的命令的时间不确定,我根据文档添加了withoutOverlapping(),但是好像没有生效

    开发环境:windows 10, laradock ,Laravel 5.4.36

    相关代码

    kernel的代码

    $schedule->command('produce:email')->withoutOverlapping();

    命令的代码
    public function handle()
        {
    
            $name = mt_rand(10000,99999);
    
            Log::info($name . ':开始运行时间'.date('Y-m-d H:i:s'));
    
    
            $this->parseAppName();
    
            $this->createQueue();
    
            arsort($this->queue);
    
            if(count($this->queue) <= 0){
                return ;
            }
    
            foreach ($this->queue as $key => $queue) {
    
                $this->getHistoryId($key,$queue['filter']);
    
                $this->executeAdd($key,$queue);
            }
    
    
            Log::info($name .':结束运行时间'.date('Y-m-d H:i:s'));
        }
    输出的日志文件如下: 80781任务结束前系统新开了8个任务
    [2018-07-10 03:23:18] local.INFO: 80781:开始运行时间2018-07-10 03:23:18  
    [2018-07-10 03:24:07] local.INFO: 91189:开始运行时间2018-07-10 03:24:07  
    [2018-07-10 03:25:05] local.INFO: 73828:开始运行时间2018-07-10 03:25:05  
    [2018-07-10 03:26:09] local.INFO: 96934:开始运行时间2018-07-10 03:26:09  
    [2018-07-10 03:27:06] local.INFO: 79930:开始运行时间2018-07-10 03:27:06  
    [2018-07-10 03:28:13] local.INFO: 39674:开始运行时间2018-07-10 03:28:13  
    [2018-07-10 03:29:06] local.INFO: 44935:开始运行时间2018-07-10 03:29:06  
    [2018-07-10 03:30:16] local.INFO: 40087:开始运行时间2018-07-10 03:30:16  
    [2018-07-10 03:31:05] local.INFO: 42935:开始运行时间2018-07-10 03:31:05  
    [2018-07-10 03:31:26] local.INFO: 91189:结束运行时间2018-07-10 03:31:26 
     
    [2018-07-10 03:31:26] local.INFO: 80781:结束运行时间2018-07-10 03:31:26
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 心痛的网名繁体字 普通会员 1楼

      在 Laravel 中,你可以使用 Job 进程来实现定时任务的重复执行。以下是一个简单的示例:

      首先,你需要在 config/app.php 中设置一个 Job 进程,例如:

      php 'jobs' => [ 'your_job' => [ 'driver' => 'job', 'queue' => 'default', 'handler' => function ($job, $args, $queue, $context) { // 在这里处理你的任务 echo "Task executed: " . $job->name . "\n"; }, ], ],

      然后,你可以在 app/Console/Kernel.php 中创建一个新的 Job 进程:

      ```php use Illuminate\Support\Facades\Artisan;

      class YourJob { public function handle() { // 在这里处理你的任务 echo "Task executed: " . $this->name . "\n"; } } ```

      最后,你可以在命令行中运行 php artisan make:job YourJob 来创建一个新的 Job 进程。你可以使用 php artisan schedule:run 来启动这个 Job 进程,然后在你想要重复执行的任务中添加一个新的任务。

      注意:在 Laravel 中,所有的 Job 进程都会被并发执行。如果你想要在一个单独的线程中运行一个 Job 进程,你需要使用 Task 进程。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部