美文网首页
守护程序知识

守护程序知识

作者: Amy1234567 | 来源:发表于2023-06-24 11:21 被阅读0次

什么是supervisor?

supervisor是linux系统中常用的进程守护程序,当队列进程queue:work意外关闭,它会重新启动队列程序。

怎么安装supervisor?

在ubuntu安装Supervisor非常简单:

sudo apt-get install supervisor

注:如果自己配置Supervisor有困难,可以考虑使用laravel forge, 它会为Laravel项目自动安装并配置Supervisor

怎么配置supervisor?

supervisor配置文件通常存放在/etc/supervisor/conf.d目录,在该目录下,可以创建多个配置文件指示supervisor如何监控进程的,例如,让我们创建一个开启并监控queue:work的laravel-worker.conf文件:

[program:laravel-worker]

process_name=%(program_name)s_%(process_num)02d

command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3

autostart=true

autorestart=true

user=forge

numprocs=8

redirect_stderr=true

stdout_logfile=/home/forge/app.com/worker.log

numprocs指令让supervisor运行8个queue:work进程并监视它们,如果失效的话重新启动。当然,你需要修改queue:work sqs的command指令来映射你的队列连接。

怎么启动supervisor?

成功配置文件后,需要刷新supervisor的配置信息并使用如下命令启动进程:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*

如何处理失败队列?

不可避免会出现运行失败的任务。laravel可以轻松设置任务运行的最大尝试次数,若是执行次数达到限定,该任务会被插入到failed_jobs表,要创建一个failed_jobs表的迁移,可以使用queue:failed-table命令

php artisan queue:failed-table

php artisan migrate

然后,运行队列进程时,通过--tries参数项来设置任务允许的最大尝试次数,如果没有指定--tries选项的值,任务会被无限期重试:

php artisan queue:work redis --tries=3

怎么清除失败队列?

可以在任务类中定义failed方法,从而允许你在失败发生时执行指定的动作,比如发送失败队列通知,记录日志等等。导致任务失败的Exception会被传递到failed方法:

<?php

namespace App\Jobs;

use Exception;

use App\Podcast;

use App\AudioProcessor;

use Illuminate\Queue\SerializesModels;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Contracts\Queue\ShouldQueue;

class ProcessPodcast implements ShouldQueue

{

    use InteractsWithQueue, Queueable, SerializesModels;

    protected $podcast;

    /**

    * Create a new job instance.

    * @param  Podcast  $podcast

    * @return void

    */

    public function __construct(Podcast $podcast)

    {

        $this->podcast = $podcast;

    }

    /**

    * Execute the job.

    * @param  AudioProcessor  $processor

    * @return void

    */

    public function handle(AudioProcessor $processor)

    {

        // Process uploaded podcast...

    }

    /**

    * The job failed to process.

    * @param  Exception  $exception

    * @return void

    */

    public function failed(Exception $exception)

    {

        // 发送失败通知, etc...

    }

}

怎么重试失败队列?

要查看已插入到failed_jobs数据表中的所有失败队列,可以使用Artisan命令queue:failed

php artisan queue:failed

该命令会列出任务ID,连接,队列和失败时间,任务ID可用于重试失败任务,例如要重试一个ID为5的失败任务,可以运行下面的命令:

php artisan queue:retry 5

要重试所有失败任务,运行如下命令:

php artisan queue:retry all

如果要删除一个失败任务,可以使用queue:forget 命令:

php artisan queue:forget 5

要删除所有失败任务,可以使用queue:flush命令:

php artisan queue:flush

什么是任务事件?

通过queue门面提供的before和after方法可以在任务被处理之前或之后指定要执行的回调。这些回调可用来记录日志或者记录统计数据。通常,你可以在服务提供者中使用这些方法。比如,我们可能在AppServiceProvider这样用:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Queue;

use Illuminate\Support\ServiceProvider;

use Illuminate\Queue\Events\JobProcessed;

use Illuminate\Queue\Events\JobProcessing;

class AppServiceProvider extends ServiceProvider

{

    /**

    * Bootstrap any application services.

    * @return void

    */

    public function boot()

    {

        Queue::before(function (JobProcessing $event) {

            // $event->connectionName

            // $event->job

            // $event->job->payload()

        });

        Queue::after(function (JobProcessed $event) {

            // $event->connectionName

            // $event->job

            // $event->job->payload()

        });

    }

    /**

    * Register the service provider.

    * @return void

    */

    public function register()

    {

        //

    }

}

相关文章

  • Java19守护线程

    在程序后台执行的线程,当程序结束时,守护线程也结束。程序结束:所有的非守护线程结束。

  • 守护

    这就代表着守护程序启动了一次 守护 发现VSC4 挂了 重启的流程是 先停止喂狗狗,然后守护程序调用reboot指...

  • 如何在Docker守护进程停机期间保持容器处于活动状态

    默认情况下,当 Docker 守护进程终止时,它会关闭正在运行的容器。您可以配置守护程序,以便在守护程序不可用时容...

  • 进程守护程序的一点想法

    笔者前段时间看到有个用 QT写的进程守护程序,在程序有卡死等问题时就依靠单独的守护程序来做健康检查,重启进程。...

  • 提高构建速度

    启用Gradle Daemon守护程序来提高构建速度

  • 定时任务和守护程序

    1.守护程序## 基于node.js开发的守护特点:不间断运行,接近于0秒拉起,建议用于运行服务程序 2.定时任务...

  • 果壳守护果实,骑士守护知识

    你的知识可以很值钱。 月前分答的火爆已经说明了这一点,作为一个语音知识问答产品,分答巧妙地满足了作者的变现需求与公...

  • 读书读出什么?

    有人读书,秉灯夜读,读出了知识! 于是,他像守护女人柜子里的首饰一样守护它。 他以知识为中心,固步自封,画地为牢,...

  • REDIS----配置文件----GENERAL

    GENERAL部分: 1.守护线程: 默认情况下,Redis不会作为守护程序运行。 如果需要,请使用“是”。 请注...

  • 编译异常

    无法启动守护进程 无法启动守护进程可能是后台配置有问题,也可能是电脑运行程序太多...

网友评论

      本文标题:守护程序知识

      本文链接:https://www.haomeiwen.com/subject/docbydtx.html