用于 Laravel 队列立即退出的 Systemd 服务

问题描述 投票:0回答:1

我正在尝试在 Amazon Linux 2023 实例上创建一个服务来为 Laravel 10 运行 mysql 数据库队列。由于各种原因,我无法使用 Supervisor,所以我使用 Systemd。

我正在升级 AMI,从 Laravel 9 升级到 10,所以我知道这在过去是有效的(但未经 SystemD 测试)。

我创建了一个服务 laravel-worker.service 来执行“artisanqueue:work”命令。执行“sudo systemctl daemon-reload”、“sudo systemctl start laravel-worker”后,它似乎启动了工作程序并立即完成它。

我已经确认它没有处理队列。我可以看到作业位于数据库中。

如果我通过 SSH 登录并输入“artisanqueue:work”,作业就会得到处理。

服务来了

编辑:我尝试过 Type=simple 和 oneshot 没有区别。

[Unit]
Description=Laravel Queue Worker
After=network.target

[Service]
User=root
Group=root
#Type=simple
Type=oneshot
Restart=on-failure
RemainAfterExit=true
ExecStart=/usr/bin/nohup /usr/bin/php /var/www/html/artisan queue:work --sleep=3 --tries=3
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

这是来自“sudo systemctl status laravel-worker”的状态响应

laravel-worker.service - Laravel Queue Worker
     Loaded: loaded (/etc/systemd/system/laravel-worker.service; enabled; preset: disabled)
     Active: active (exited) since Thu 2023-12-21 18:26:13 UTC; 1h 2min ago
   Main PID: 621553 (code=exited, status=0/SUCCESS)
        CPU: 53ms

Dec 21 18:26:13 ip-xxxxxxxxxx.us-east-2.compute.internal systemd[1]: Starting laravel-worker.service - Laravel Queue Worker...
Dec 21 18:26:13 ip-xxxxxxxxxx.us-east-2.compute.internal systemd[1]: Finished laravel-worker.service - Laravel Queue Worker.
linux laravel systemd laravel-10 laravel-queue
1个回答
0
投票

Type=oneshot
通常用于执行任务然后退出的脚本,这可能不适合像工作人员这样持续运行的服务,因此
Type=simple
似乎更适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.