当使用 restart=on-failure 时,Laravel systemd 队列作业停止

2023-12-27

我们有一个用于队列的 Laravel SystemD 作业,例如发送通知电子邮件。

现在我们注意到,当电子邮件发送失败时,SystemD 作业会停止。

这就是我们的服务定义的样子:

/etc/systemd/system # cat example.com-queue.service

[Unit]
Description=Laravel queue worker

[Service]
User=www-data
Group=www-data
Restart=on-failure
ExecStart=/usr/bin/php /var/www/html/example.com/web/artisan queue:work --daemon

[Install]
WantedBy=multi-user.target

网站https://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart= https://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=指出,失败时不会“成功时”重新启动。

如果我们仔细观察服务状态,我们会发现 Laravel 队列实际上正在以“0”退出代码退出:

# systemctl status example.com-queue.service
● example.com-queue.service - Laravel queue worker
     Loaded: loaded (/etc/systemd/system/example.com-queue.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2021-08-14 15:11:18 CEST; 2 days ago
    Process: 2417820 ExecStart=/usr/bin/php /var/www/html/example.com/web/artisan queue:work --daemon (code=exited, status=0/SUCCESS)
Aug 14 15:11:08 example php[2417820]: [2021-08-14 15:11:08][16768] Processing: App\Notifications\UploadSuccess
Aug 14 15:11:18 example php[2417820]: [2021-08-14 15:11:18][16768] Failed:     App\Notifications\UploadSuccess
Aug 14 15:11:18 example systemd[1]: example.com-queue.service: Succeeded.

有一个简单的解决方法:我们可以切换到“Restart=always”,但我想阐明事实并找出为什么 Laravel - 在发生错误时 - 返回零退出代码。我们还担心“Restart=always”可能会导致不必要的副作用。


通常,我使用supervisor处理queues。不过它很先进,而且有很多article/support发布了其配置,您可以轻松找到它们。

我正在跟进Laravel 文章中的这个主管配置 https://rohit-shirke.medium.com/configuring-supervisor-for-laravel-queues-81e555e550c6

这对我来说非常有效,我已经配置了很多 Laravel 项目queues通过它。它还具有许多内置选项来处理queue-failure, restarting等等。此外,我们可以运行多个workers在最短的时间内轻松使用它。它是process handling方法非常优化并且有据可查。

基本安装流程:

管理 Laravel 队列或任何需要在服务器上运行的托管进程

sudo apt-get install supervisor

加载目录cd /etc/supervisor/conf.d并创建一个配置文件my-project-worker.conf并添加以下配置

[program:<custom-worker-name>]  
command=<project-directory-path>/artisan queue:work --tries=3  --sleep=3
directory=<project-directory-path i.e /var/www/html/example-project>
stdout_logfile=<custom-path-to-store-log i.e /var/www/html/example-project/storage/logs/supervisord.log>
redirect_stderr=true
autostart=true
autorestart=true
numprocs=1
stopwaitsecs=3600

## For Multiple Workers ##

[program:%(<custom-worker-name>)s_%(process_num)02d]  
command=<project-directory-path>/artisan queue:work --tries=3  --sleep=3
directory=<project-directory-path i.e /var/www/html/example-project>
stdout_logfile=<custom-path-to-store-log i.e /var/www/html/example-project/storage/logs/supervisord.log>
redirect_stderr=true
autostart=true
autorestart=true
numprocs=3
stopwaitsecs=3600

Note:确保设置<custom-worker-name>, <project-directory-path> and <custom-path-to-store-log>根据你的项目。

Remember当您部署包含对现有作业代码的修改的新代码时,您需要重新启动主管进程或该特定作业。

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start <custom-worker-name>:*

要检查正在运行的主管进程:

sudo supervisorctl

要检查进程的状态:

sudo systemctl status supervisor

要停止该进程:

sudo systemctl stop supervisor
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当使用 restart=on-failure 时,Laravel systemd 队列作业停止 的相关文章

  • 使用 with 的热切加载模型,但给它起了另一个名字 - Laravel 5.2

    是否可以使用 with 方法来使用预加载 但给它另一个名称 就像是 gt with documents as product documents documents as categories 我有一个可以是产品或类别的文档表 急切加载可以
  • 此集合实例 Laravel 关系中不存在属性 [X]

    我在 Laravel 5 6 中使用了很多 Realtions 当我添加 phonebooks 时 我看到所有关系都工作正常 一切都很好 但是当我尝试在视图中显示它们时 我得到了属性在此集合上不存在的错误 这是关系代码 public fun
  • AngularJS 和 Laravel - 跨域 CORS / XHR 请求缺少(记住)cookie

    当我不使用 Chrome 中的 disable web security 选项时 我的 CORS XHR 请求在请求标头中缺少 Remember xyz cookie 如果我启用该选项 remember xyz cookie 将包含在请求标
  • 区分 Web 路由调用与 API 路由调用?

    In my web php文件中 我有一条如下所示的路线 Route get HomeController getFeed 而在我的api php文件中 我有一条如下所示的路线 Route get feeds HomeController
  • Laravel 5.4 密码重置

    我有一个 Laravel 5 4 应用程序 我的管理区域中有一个视图 允许我查看所有用户 我想创建一个功能 允许我单击后端的按钮 自动发送默认 Laravel 密码重置功能的过程 在我看来 我有以下几点 table class table
  • 附加之前检查数据库中是否存在 ID

    我通过选择一个带有类别的数组json decode并将它们附加到文章中 public static function setArticleCategory Request request article Article where id r
  • Laravel:运行队列:在 Windows Azure Web App 上连续监听

    我觉得问这个问题有点傻 但我似乎无法在互联网上找到这个问题的答案 经过几个小时的搜索后 我发现在 Linux 服务器上 您使用 Supervisor 在您的网站上连续运行 php artisanqueue listen 无论有或没有守护进程
  • 使用 Laravel Fluent 查询生成器从多个表中进行选择

    我正在重写一些 PHP MySQL 来与 Laravel 一起使用 我想做的一件事是使数据库查询更加简洁使用 Fluent 查询生成器 http laravel com docs database fluent但我有点迷失 SELECT p
  • laravel 5:找不到类“输入”

    In my routes php我有的文件 Route get function return view login Route get index function return view index Route get register
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 我可以更改 Route-Model-Binding 的解析逻辑以始终小写字符串键吗?

    我在 Laravel 5 7 项目中使用 UUID 键 并且效果非常好 当通过路由从数据库请求项目时 将查找键并将其作为字符串进行比较 当请求发送大写的 uuid 字符串时 路由模型绑定将找不到模型 因为 Laravel 的 UUID 字符
  • Laravel 5.3 Eloquent 事务和外键限制

    我正在从事一个更大的项目 我们在一个 Postgres 数据库中有多个模式 我们在模式之间创建了外键 这是一个例子 gt 我们有公司模式和用户模式 公司模式有company users表 该表对user users表有外键限制 CREATE
  • 将策略应用到资源控制器

    我有一个CRUD资源定义通过Route resource User UserController 既然可以生成CRUDGates and Policies 有没有办法应用这样的Gate Policy 以便将相应的Gate Policy应用于
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • Laravel Passport,通过密码客户端进行多个连接

    我无法理解如何使用 Laravel Passport 通过密码客户端为同一用户实现多个连接 我有一个移动应用程序 需要与基于 Laravel 的 API 进行通信 我的用户在首次启动应用程序时必须输入他们的login and passwor
  • 运行一个特定的 Laravel 迁移(单个文件)

    我的项目中有 5 次迁移 我只想运行这些迁移之一 是否可以将单个文件的名称传递给php artisan migrate命令 您可以将迁移放入更多文件夹中并运行如下命令 php artisan migrate path app databas
  • 如果您编辑/更新该特定对象,laravel 唯一名称表示已被占用

    我有一个投资组合表 我没有在 url 中显示投资组合的 id 而是使用 getRouteKeyName 显示投资组合的名称 所以我希望该名称是唯一的 否则如果它已经存在 它可能会显示错误的投资组合 我将名称字段的规则设置为唯一 如果我现在编
  • laravel 中哪里可以设置标题

    我想将标题设置为array Cache Control gt no cache no store max age 0 must revalidate Pragma gt no cache Expires gt Fri 01 Jan 1990
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar

随机推荐

  • 如何使用派生列转换将字符串 (YYMMDD) 转换为日期时间?

    我有一个输入文本文件 其中包含几列 即TransactionID receiveddt description等等 recieveddt列具有以下格式的日期值120419 yymmdd 我想将 txt 输入文件加载到数据库中 但目标列rec
  • 有没有java api可以访问bugzilla? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个 独立的 java api 将 XML RPC 接口包装到 bugzilla 我不想为它编写
  • Magento - 在所有页面中创建固定块

    如何在不点击模块名称的情况下在包括主页在内的所有页面中可见的右列中创建一个块 谢谢 希望能很好地理解你的问题 1 创建一个模块 例如Mynamespace Mymodule 2 在模块中创建一个块 例如 Mynamespace Mymodu
  • Spock Test,只检查方法是否被调用,不执行

    在我们的 Spock 测试中 我们想要检查我们的软件中是否选择了正确的路径 但我们不想测试所调用方法的功能 这是在单独的测试中完成的 def Test setup service metaClass innerMethod gt retur
  • SSIS 任务导入不一致的列数?

    问题 我经常收到来自不同供应商的提要文件 尽管列名称一致 但当某些供应商发送源文件中包含或多或少列的文本文件时 就会出现问题 此外 这些文件的排列不一致 除了 Cozy Roc 提供的动态数据流任务之外 还有另一种方法可以导入这些文件 我不
  • 如何使用 Mockito 模拟 void 方法

    如何模拟具有 void 返回类型的方法 我实现了一个观察者模式 但我无法用 Mockito 模拟它 因为我不知道如何做 我试图在互联网上找到一个例子 但没有成功 我的班级是这样的 public class World List
  • 我什么时候应该在 UML 图中使用依赖关键字 <>?

    参考这个来源 https www uml diagrams org dependency html UML的定义是 依赖性是一种有向关系 用于表明某个 UML 元素或一组元素需要 需要或依赖于其他模型元素来进行规范或实现 但后来根据教科书的
  • 如何在android中的gridview布局中添加页脚

    我需要在 android 中的 gridview 布局中添加某种页脚视图 没有我可以找到的官方文档 而且我无法找到在我的谷歌搜索中实际有效的方法 有人取得了任何成就吗 像这样 我需要制作一个显示在 gridview 底部的按钮 以便我可以在
  • scrapy“请求网址中缺少方案”

    下面是我的代码 import scrapy from scrapy http import Request class lyricsFetch scrapy Spider name lyricsFetch allowed domains m
  • WCF 给出不安全或不正确安全的故障错误

    我正在尝试使用远程 svc Web 服务 我使用创建代理类svcutil exe 之后我将该类添加到我的控制台应用程序中 但它产生了一个错误 从另一方收到不安全的错误或不正确的安全故障 故障代码及详细信息请参见内部故障异常 System S
  • 使用 Echo 测试 POST 请求(预期输出与实际输出)

    我对 Go 有点陌生 所以 如果这是一个愚蠢的问题 我很抱歉 我最近一直在尝试使用 Echo 的一些 API 我正在尝试测试 Go echo 的路由 POST 处理程序 它获取 json 并将其放入数组中 以下是处理程序的代码main go
  • 如何将 Vagrant 项目目录与现有 VirtualBox 虚拟机关联?

    不知何故 我的 Vagrant 项目已与其 VirtualBox VM 解除关联 因此当我vagrant upVagrant 将导入基础盒子并创建一个新的虚拟机 有没有办法将 Vagrant 项目与现有 VM 重新关联 Vagrant 如何
  • 如何在Python中更改图像捕获日期?

    由于相机日期设置错误 我有超过 500 张图像 png jpg 的拍摄日期 拍摄日期 错误 我将照片移至移动设备 移动图库根据 拍摄日期 对照片进行排序 我希望所有照片都按顺序显示 那么如何使用 python 脚本更改捕获日期 拍摄日期 使
  • npm package.json 别名,如 webpack

    我正在尝试为模块添加别名 但是我不确定如何使用 package json 来做到这一点 在 webpack 中你会做这样的事情 module exports resolve alias pixi js pixi js legacy 但是没有
  • Spring Data JPA 通过嵌入对象属性查找

    我想编写一个 Spring Data JPA 存储库接口方法签名 它可以让我找到具有该实体中嵌入对象的属性的实体 有谁知道这是否可能 如果可能的话如何 这是我的代码 Entity Table name BOOK UPDATE QUEUE i
  • 将 Spring Security 与 Facebook 登录集成

    我在我的项目中使用 Spring MVC 和 Spring Security 这使用我自己的用户数据进行身份验证 但现在我正在尝试与 Facebook 整合 我已经在 Facebook 上创建了应用程序 这意味着我获得了客户端 ID 和客户
  • 如何重新计算 GROUP 上的字段

    我有一张像这样的桌子 f1 f2 fk 1 0 100 1 1 200 1 2 300 1 3 400 2 0 300 2 1 400 2 2 500 Where f1 f2 是PK fk是外键 fk 的值并不多 大约是 20 f2 永远不
  • org.junit.platform.commons.JUnitException:ID为“junit-jupiter”的TestEngine未能发现测试

    我想在 Gradle 项目中实施 Junit 5 测试 我试过这个 梯度配置 plugins id org springframework boot version 2 5 5 id io spring dependency managem
  • ASP .net 会员交易

    我想在一个事务中进行两个数据库操作 这两个操作是 执行一次插入操作 创建一个用户 使用会员资格 sql 会员资格提供程序 I tried 交易范围但它转到了该行的分布式事务 Membership CreateUser 测试 密码 电子邮件受
  • 当使用 restart=on-failure 时,Laravel systemd 队列作业停止

    我们有一个用于队列的 Laravel SystemD 作业 例如发送通知电子邮件 现在我们注意到 当电子邮件发送失败时 SystemD 作业会停止 这就是我们的服务定义的样子 etc systemd system cat example c