上一节,已经队列任务类已经成功创建了;
但是上节遗留下来的问题;
问题 :
在我们真实的开发过程中;
不可能一直开着这个命令行这个窗口;
里面运行着 php artisan queue:work
这个命令吧;
这时就需要 搭建进程守护了;
接下来我们会需要下载一个进程守护的软件supervisor
;
supervisor使用python(现在在自学的一门语言)开发的一个client/server服务;
是linux/unix系统下的一个进程管理工具;
它可以很方便的监听、停止、重启一个或多个进程;
用supervisor管理的进程,打你个进程意外被杀死;
supervisor监听到进程死后,会自动将它重新拉起,很方便的做到自动恢复的功能;
不再需要自己写shell脚本控制;
它就是会自动执行你所写的命令;
神不神奇;
(╥╯^╰╥)
今天会下载两个版本的supervisor
;
一个是Centos 的安装方式;
还有一个是他的好兄弟ubuntu;
废话不多说,直接上干货;
首先是ubuntu版的安装方式;
其实都大同小异;
sudo apt-get install supervisor //ubuntu 命令安装 supervisor
出现一下代码,就说明安装成功;
vagrant@homestead:/vagrant/api$ sudo apt-get install supervisor
Reading package lists... Done
Building dependency tree
Reading state information... Done
supervisor is already the newest version (3.2.0-2ubuntu0.1).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Supervisor 的配置文件通常位于 /etc/supervisor/conf.d 目录下;
在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程;
cd /etc/supervisor/conf.d //进入到这个目录
ls //发现什么也没有
这时我们需要创建新的配置文件;
vim laravel-worker.conf //创建文件laravel-worker.conf文件
把以下代码粘贴进来,稍作修改就可以了;
[program:laravel-worker] //program这个参数必须和文件名保持一致
process_name=%(program_name)s_%(process_num)02d
command=php /vagrant/api/artisan queue:work --queue=default --tries=3 --daemon //运行程序的命令
autostart=true //程序意外退出是否自动重启
autorestart=true //是否自动启动
user=www //进程执行的用户身份
numprocs=8 //表示启动多少个进程来监听 Laravel 队列
redirect_stderr=true //这个参数具体是把 生成的信息 放在下面的日志文件当中
stdout_logfile=/vagrant/api/storage/logs/worker.log //生成进程日志的地方 , 这里我把他放到了项目目录的storage下面
wq
配置完成之后;
我们需要执行一下命令,更新一下配置文件;
vagrant@homestead:/etc/supervisor/conf.d$ sudo supervisorctl reread //重新读取配置文件
laravel-worker: changed
上面出现 changed
重新读取成功;
重新读取配置文件之后;
我们需要更新supervisorctl进程;
vagrant@homestead:/etc/supervisor/conf.d$ sudo supervisorctl update //更新supervisorctl进程
laravel-worker: stopped
laravel-worker: updated process group
接下来我就可以启动程序;
sudo supervisorctl start laravel-worker:*
这时候我们就不需要在命令行当中去敲 php artisan queue:work
这个命令了;
这时候我们再次请求一下路由;
出现yes 字符;
然后我们在打开日志文件;
[2019-07-28 19:57:16] local.INFO: TestJob poset title is {"id":1,"name":"\u524d\u53f0\u7f51\u7ad9"}
[2019-07-28 19:57:16] local.INFO: TestJob poset title is {"id":48,"name":"\u6559\u80b2\u4ea7\u54c1\u5e93"}
[2019-07-28 19:57:16] local.INFO: TestJob poset title is {"id":65,"name":"\u56fe\u4e66\u4f01\u4e1a\u7248"}
注意我没有运行 php artisan queue:work
命令;
日志就直接出现了;
神不神奇;
安装 Supervisor;
yum install python-setuptools
easy_install supervisor
或者easy_installbuhaoz不好使;
如果easy_install不好使就从官方下载:
wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz
然后通过python安装:
tar zxf supervisor-3.3.1.tar.gz
cd supervisor
python setup.py install
如下提示,说明安装完成:
Installed /usr/lib/python2.7/site-packages/meld3-1.0.2-py2.7.egg
Finished processing dependencies for supervisor
创建文件夹和配置文件;
对比之前ubuntu我们是不需要创建文件夹的;
没有对比就没有伤害;
还是ubuntu安装简单啊;
mkdir /etc/supervisor //创建文件夹
echo_supervisord_conf > /etc/supervisor/supervisord.conf //生成supervisor配置文件
修改/etc/supervisor/supervisord.conf文件内容
vim /etc/supervisor/supervisord.conf
在文件的结尾处添加如下代码:
[include]
files = conf.d/*.conf //引入配置文件
执行一下命令,是配置文件生效;
[root@VM_0_7_centos /]# supervisorctl reload
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
如果爆以上的错误,没有关系;
是因为我们没有开启supervisorctl 进程;
执行重新命令肯定会失败的啊;
可以先不管这个报错;
接下来在/etc/supervisor/下创建conf.d文件夹,及ProjectName.conf(最好以项目名称命名的,以便于区分);cd /etc/supervisor
进入到目录里面;
mkdir conf.d //创建conf.d目录
这些操作都与ubuntu的类似;
只不过centos,需要手动创建文件夹和文件;cd conf.d
进入到目录里面;
创建配置文件;
vim laravel-worker.conf //创建文件laravel-worker.conf文件
与ubuntu的一样;
[program:laravel-worker] //program这个参数必须和文件名保持一致
process_name=%(program_name)s_%(process_num)02d
command=php /vagrant/api/artisan queue:work --queue=default --tries=3 --daemon //运行程序的命令
autostart=true //程序意外退出是否自动重启
autorestart=true //是否自动启动
user=www //进程执行的用户身份 需要确保你的用户是否存在,不然会报错
numprocs=8 //表示启动多少个进程来监听 Laravel 队列
redirect_stderr=true //这个参数具体是把 生成的信息 放在下面的日志文件当中
stdout_logfile=/vagrant/api/storage/logs/worker.log //路径必须存在,生成进程日志的地方 , 这里我把他放到了项目目录的storage下面
注意:再复制laravel-worker.conf文件内容时 , 把注释去掉;
不然会报错;wq
配置完成之后;
运行supervisord,查看是否生效,执行以下命令:
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep laravel-worker
如果出现一下提示 , 说明运行成功;
[root@VM_0_7_centos conf.d]# ps -ef | grep laravel-worker
root 26211 22208 0 21:02 pts/0 00:00:00 grep --color=auto laravel-worker
运行成功之后它就会在后台默默的执行 php artisan queue:work
命令
好好学习 , 天天线上;
supervisor拓展:
sudo service supervisor stop //停止supervisor服务
sudo service supervisor start //启动supervisor服务
supervisorctl shutdown //关闭所有任务
supervisorctl stop|start program_name //启动或停止服务
supervisorctl status //查看所有任务状态
注意:
laravel job 走的是常驻内存的形式;
所以每次改动代码了;
重启守护进程:supervisor restart
;
重启laravel队列服务:php artisan queue:restart
;
本文为史大坨原创文章,转载无需和我联系,但请注明来自史大坨博客https://www.shidatuos.cn
baijunyao:亲; debugbar 没有关哈; 会暴露一些安全信息; 把 .env 中的 DEBUGBAR_ENABLED 设置为 false ; 可以参考: https://baijunyao.com/docs/laravel-bjyblog/部署到生产环境.html
2019-09-01 10:40:56 回复