使用 systemd 运行 Horizon
使用 systemd 运行 Horizon
Horizon 可以轻松的处理 Laravel Redis 队列,并且能够很容易的监控任务的指标。
在官方文档中,Horizon 使用 Supervisor 来作为进程管理器。
最近几年的 Linux 基本都开始采用 systemd 来管理进程,我们再也不用写麻烦的 init 脚本了。本文就教你怎么用 systemd 来启动 Horizon。
首先要知道一个概念 Unit(单元),systemd 中所有可以管理的资源统称为 Unit。Unit 分为 12 种,比如 service、target、device、mount、timer……,我们要用到的就是这个 service。
我们创建的 service 文件会放在 /etc/systemd/system/
目录下,现在就开始写 service 文件吧。
vim /etc/systemd/system/horizon.service
以下是写好的 service 文件,⚠️注意修改工作目录
[Unit]
# 描述
Description=Laravel Horizon
# 表明本服务要在 mysql 和 redis 之后启动,Laravel 依赖 mysql,Horizon 依赖 redis
After=mysqld.service redis-server.service
[Service]
# !!!这里修改为laravel项目根目录
WorkingDirectory=/project/laravel/root
# 这里可以指定运行的用户
User=www
Group=www
# 启动命令,php 建议使用绝对路径
ExecStart=/usr/bin/php artisan horizon
# 停止命令,使用 horizon 提供的优雅停止方法
ExecStop=/usr/bin/php artisan horizon:terminate
# 可以控制服务在什么情况下重新启动,这里设置为异常退出时重新启动
Restart=on-failure
# 重新启动的前等待的时间
RestartSec=30s
# 指定正确退出的代码,一些没有处理 TERM 信号的程序退出代码会是 143 ,Horizon 的退出代码是 0
SuccessExitStatus=0
[Install]
# 指定在 多用户 模式下启动,就是一般的命令行模式啦,也包括图形界面模式
WantedBy=multi-user.target
改好之后保存一下 :wq
然后重新加载配置文件:
systemctl daemon-reload
现在来启动服务:
systemctl start horizon.service
正常启动之后是不会有输出的,我们可以通过 status
命令来查看状态:
systemctl status horizon.service
看到绿色的 running
了吗,那就是正常运行了,下面可以看到启动的进程情况,这里是三个默认的 work 进程。
如果更新了代码,我们可以使用 restart
命令来重启 Horizon 进程,使用新的代码运行:
systemctl restart horizon.service
使用 enable
命令可以指定服务开机启动:
systemctl enable horizon.service
这样下次重启的时候 Horizon 就自己启动啦~
如果不再需要自动启动,那就用 disable
命令:
systemctl disable horizon.service
当然 disable
命令并不会马上停止正在运行的服务,它只是让服务在下次开机的时候不自动启动,我们可以使用 stop
命令来直接停止正在运行服务:
systemctl stop horizon.service
最后还有个查看 systemd 的日志的命令 journalctl
我们可以这样查看一个服务输出的日志:
journalctl -u horizon.service
加上参数 -f
可以看到实时输出的日志。
本作品采用《CC 协议》,转载必须注明作者和本文链接
赞赞赞, 但是我们这还是都要的 supervisor
这确实方便多了。
不错,已使用
可以,很强
如果确认服务的正确退出代码呢?