给 laravel 安装配置队列与定时任务守护horizonSupervisor

安装 horizonSupervisor

https://learnku.com/docs/laravel/10.x/horizon/14906
https://learnku.com/courses/ecommerce-advance/8.x/queue-and-timed-tasks/10799
https://www.cnblogs.com/gooo/p/17474897.html
yum update
yum install -y epel-release
yum install -y supervisor
$ supervisord -v
4.2.2

参照

https://segmentfault.com/a/1190000040154804
https://blog.csdn.net/chang995196962/article/details/130762977
https://www.cnblogs.com/ytshit/p/15820846.html

配置

/etc/supervisord.d/文件夹下创建laravel_shop.ini文件
参照:https://segmentfault.com/a/1190000040154804

vim laravel_shop.ini

内容(使用中)

[program:laravel-shop-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/php8/bin/php /www/laravel_shop/artisan horizon
autostart=true
autorestart=true
user=www
numprocs=8
redirect_stderr=true
stdout_logfile=/www/laravel_shop/storage/logs/worker.log

以下配置未确认

[program:laravel-shop-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/php8/bin/php /www/laravel_shop/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www
numprocs=8
redirect_stderr=true
stdout_logfile=/www/laravel_shop/storage/logs/worker.log

启动
supervisorctl status 状态是 RUNNING 说明运行正常

几个命令

supervisorctl reread # 读取配置
supervisorctl update # 更新配置
supervisorctl status # 查看状态
supervisorctl start laravel-shop-worker # 启动
php artisan horizon:terminate  # Horizon 会等当前正在处理的所有任务都完成后退出

开机启动服务
systemctl enable supervisord

验证一下是否为开机启动
systemctl is-enabled supervisord

Laravel 使用 Horizon 管理定时任务

安装

composer require laravel/horizon

发布

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

访问

现在我们访问 你的域名/horizon看看 Horizon 的管理面板:

默认情况下这个页面只能在 APP_ENV=local 的环境可以看到,所以不用担心线上站点信息泄露。现在我们访问 你的域名/horizon 看看 Horizon 的管理面板

默认情况下这个页面只能在 APP_ENV=local 的环境可以看到,所以不用担心线上站点信息泄露。

如果看到状态是 Inactive,我们需要在终端调用 Horizon 的命令来启动:

php artisan horizon
如果想在生产环境上看到面板,可以在你的 app/Providers/HorizonServiceProvider.php 文件中,有一个 授权拦截器(Gates) 的方法定义,该拦截器用于控制在非本地环境中对 Horizon 的访问。末可以根据需要修改此方法,来限制对 Horizon 的访问:
/**
 * 注册 Horizon 授权
 *
 * 此方法决定了谁可以在非本地环境中访问 Horizon
 */
protected function gate(): void
{
    Gate::define('viewHorizon', function (User $user) {
		// 或直接 return true;
        return in_array($user->email, [
            'test@laravel.com',
        ]);
    });
}

配置定时任务

crontab -uroot -e

* * * * * /usr/local/php8/bin/php /www/laravel_shop/artisan schedule:run >> /dev/null 2>&1

其他

chmod -R 775 /www/
chown -R nobody.nobody xxx
gitee:zhaoxfGitee001.

 

把文件夹 www_root 所属组改为 www 组
sudo chgrp -R www /www/
sudo chmod -R ug+rwx /www/

chown -R nobody.nobody /www/
chmod -R 775 /www/

fuser -k 80/tcp

一些问题

 file_put_contents(xxxx): Failed to open stream: Permission denied
解决(直接给文件夹设置777权限):chmod -R 777 xxx/

重新加载配置文件命令

systemctl reload nginx.service

查看mysql读取配置文件的默认顺序mysqld --help --verbose | more

Linux下zip压缩的解压:https://blog.csdn.net/czxboys/article/details/125155430

 

解决unix:///run/supervisor/supervisor.sock no such file

# 创建supervisor.sock
sudo touch /var/run/supervisor/supervisor.sock
sudo chmod 777 /var/run/supervisor/supervisor.sock

#重启
systemctl restart supervisord