给 laravel 安装配置队列与定时任务守护horizon
和 Supervisor
安装 horizon
和 Supervisor
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