枫枫知道个人博客
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
登录
注册
supervisor进程守护工具
supervisor是一款特别好用的进程管理工具 安装sup
搜索
[[ slide_text ]]
[[ item.content ]]
0
0
supervisor进程守护工具
发布时间:
2023-09-07
作者:
枫枫
来源:
枫枫知道个人博客
部署
supervisor是一款特别好用的进程管理工具 ## 安装supervisor ```Go // 安装第三方源,CentOS本身的yum源中没有supervisor,需要更换第三方源: yum install epel-release -y // 安装supervisor: yum install -y supervisor // 启动supervisor 服务、查看supervisor 服务状态 systemctl start supervisord // 上面那个命令失效的话 // supervisord -c /etc/supervisord.conf systemctl status supervisord ``` ### 设置supervisor开机启动 ```Go systemctl enable supervisord ``` ## supervisor配置 安装supervisor之后,在etc下有两个配置文件 ```Go supervisord.conf // supervisor的总配置文件 supervisord.d/ // supervisor进程的配置目录 ``` 我们所有的项目配置都放在`supervisord.d`目录下,方便管理 例如我新建了 `/etc/supervisord.d/test.ini`文件,`*.ini`文件是默认导入的 ```Ini [program: test] command= /www/go_pro/run directory= /www/go_pro autorestart=true autostart=true stderr_logfile=/www/go_pro/err.log stdout_logfile=/www/go_pro/out.log user=root stopsignal=INT startsecs=1 stopasgroup=true killasgroup=true ``` 编写完成之后就需要重新加载配置文件 ```Go supervisorctl reload ``` ### 配置解释 以上面的文件为例 ```Ini ; 咱们要管理的子进程 [program:test] ; 这个就是我们的要启动进程的命令路径了,可以带参数例子:/home/test.py ; a'hehe'有一点需要注意的是,我们的command只能是那种在终端运行的进 ; ,不能是守护进程。这个想想也知道了,比如说command=servicehtt ; dstart。httpd这个进程被linux的service管理了,我们的su ; ervisor再去启动这个命令这已经不是严格意义的子进程了。这个是个必须设置的 command=/bin/cat ; 这个是进程名,如果我们下面的numprocs参数为1的话,就不用管这个参数了,它 ; 认值%(program_name)s也就是上面的那个program冒号后面的名 ; ,但是如果numprocs为多个的话,那就不能这么干了。想想也知道,不可能每个 ; 程都用同一个进程名吧。 process_name=%(program_name)s ; 启动进程的数目。当不为1时,就是进程池的概念,注意process_name的设置 ; 认为1。。非必须设置 numprocs=1 ; 进程运行前,会前切换到这个目录默认不设置。。。非必须设置 directory=/tmp ; 进程掩码,默认none,非必须 umask=022 ; 子进程启动关闭优先级,优先级低的,最先启动,关闭的时候最后关闭默认值为999。。 ; 必须设置 priority=999 ; 如果是true的话,子进程将在supervisord启动后被自动启动默认就是tr ; e。。非必须设置 autostart=true ; 这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpecte ; 和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为u ; expected,只有当进程的退出码不在下面的exitcodes里面定义的退出 ; 的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 autorestart=unexpected ; 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功 ; 默认值为1。。非必须设置 startsecs=1 ; 当进程启动失败后,最大尝试启动的次数。。当超过3次后,supervisor将把此 ; 程的状态置为FAIL默认值为3。。非必须设置 startretries=3 ; 注意和上面的的autorestart=unexpected对应。。exitcod ; s里面的定义的退出码是expected的。 exitcodes=0,2 ; 进程停止信号,可以为TERM,HUP,INT,QUIT,KILL,USR1,or ; SR2等信号默认为TERM。。当用设定的信号去干掉进程,退出码会被认为是exp ; cted非必须设置 stopsignal=QUIT ; 这个是当我们向子进程发送stopsignal信号后,到系统返回信息给superv ; sord,所等待的最大时间。超过这个时间,supervisord会向该子进程发 ; 一个强制kill的信号。默认为10秒。。非必须设置 stopwaitsecs=10 ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。 ; 么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变 ; 孤儿进程。所以咱们可以设置可个选项,把整个该子进程的整个进程组都干掉。设置为t ; ue的话,一般killasgroup也会被设置为true。需要注意的是,该选项 ; 送的是stop信号默认为false。。非必须设置。。 stopasgroup=false ; 这个和上面的stopasgroup类似,不过发送的是kill信号 killasgroup=false ; 如果supervisord是root启动,我们在这里设置这个非root用户,可以 ; 来管理该program默认不设置。。。非必须设置项 user=chrism ; 如果为true,则stderr的日志会被写入stdout日志文件中默认为fals ; ,非必须设置 redirect_stderr=true ; 子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。设置 ; none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方生成日志文件 ; 而且当supervisord重新启动的时候,以前的日志文件会被清空。当redi ; ect_stderr=true的时候,sterr也会写进这个日志文件 stdout_logfile=/a/path ; 日志文件最大大小,和[supervisord]中定义的一样。默认为50 stdout_logfile_maxbytes=1MB ; 和[supervisord]定义的一样。默认10 stdout_logfile_backups=10 ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdou ; 发送信息,而supervisor可以根据信息,发送相应的event。默认为0, ; 0的时候表达关闭管道。。。非必须项 stdout_capture_maxbytes=1MB ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将触发 ; upervisord发送PROCESS_LOG_STDOUT类型的event默 ; 为false。。。非必须设置 stdout_events_enabled=false ; 这个东西是设置stderr写的日志路径,当redirect_stderr=tru ; 。这个就不用设置了,设置了也是白搭。因为它会被写入stdout_logfile ; 同一个文件中默认为AUTO,也就是随便找个地存,supervisord重启被清 ; 。。非必须设置 stderr_logfile=/a/path ; 这个出现好几次了,就不重复了 stderr_logfile_maxbytes=1MB ; 这个也是 stderr_logfile_backups=10 ; 这个一样,和stdout_capture一样。默认为0,关闭状态 stderr_capture_maxbytes=1MB ; 这个也是一样,默认为false stderr_events_enabled=false ; 这个是该子进程的环境变量,和别的子进程是不共享的 environment=A="1",B="2" serverurl=AUTO ``` ## supervisorctl命令 ```Go supervisorctl status supervisorctl restart test supervisorctl start test supervisorctl stop test ``` ## 管理go项目 ```Ini [program: go] directory = /www/go_pro command= /www/go_pro/main ; 二进制文件的地址 autorestart=true autostart=true stderr_logfile=/www/go_pro/err.log stdout_logfile=/www/go_pro/out.log user=root stopsignal=INT startsecs=1 stopasgroup=true killasgroup=true ``` ## 管理nginx 新建一个文件`vim /etc/nginx/conf/test.conf` ```nginx server { listen 8080; server_name 192.168.100.185; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_pass http://127.0.0.1:8080/; } } ``` 导入配置文件 nginx的主配置文件一般在 `/usr/local/nginx/conf/nginx.conf` 在http块中进行导入其他文件的server模块 ```nginx include /etc/nginx/conf/*.conf ``` 编写supervisor配置文件 ```Ini [program: nginx] command= /usr/local/nginx/sbin/nginx autorestart=true autostart=true user=root startsecs=1 stopasgroup=true killasgroup=true ``` 先把nginx停掉,`nginx -s stop` 再重新加载配置文件 `supervisorctl reload`
0
0
上一篇:eleasticsearch操作
下一篇:redis入门指南
你觉得文章怎么样
发布评论
59 人参与,0 条评论