systemctl,supervisor后台进程管理

systemctl

systemctl 设置自定义服务管理(以nginx为例)

建立服务文件
vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=True

[Install]
WantedBy=multi-user.target

文件说明

[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务

[Service]服务运行参数的设置
Type=forking是后台运行的形式
PIDFile : pid文件路径,在nginx配置文件中自行查找
ExecStartPre :启动前要做什么,上文中是测试配置文件 -t
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径

[Install]服务安装的相关设置,可设置为多用户

ServiceType参数说明:

Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。

Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。

Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes使得systemd在服务进程退出之后仍然认为服务处于激活状态

Type=notify:与 Type=simple相同,但约定服务会在就绪后向systemd发送一个信号。这一通知的实现由 libsystemd-daemon.so提供。

Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。

加载配置文件:
systemctl daemon-reload

设置开机自启动
systemctl enable nginx.service

查看服务
systemctl start nginx.service
systemctl list-units --type=service | grep nginx

使用命令
启动nginx服务
systemctl start nginx.service
设置开机自动启动
systemctl enable nginx.service
停止开机自动启动
systemctl disable nginx.service
查看状态
systemctl status nginx.service
重启服务
systemctl restart nginx.service

supervisorctl

centos7安装supervisor

参考官方文档:http://supervisord.org/running.html#supervisorctl-actions

安装:
yum install -y supervisor
systemctl enable supervisord
systemctl status supervisord
修改/etc/supervisord.conf配置文件出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件打开http访权限,将下面的配置:

systemctl,supervisor后台进程管理

这样就可以通过 http://ip:9001访问到supervisor的页面功能

systemctl,supervisor后台进程管理

项目配置进程
在 /etc/supervisor.conf配置文件的最后一行

systemctl,supervisor后台进程管理

可以看到include下面就是存放项目进行的文件,都在 /etc/supervisord.d文件夹中,以.ini结尾的文件

在/etc/supervisord.d创建文件(以nginx应用为例):

安装nginx:

准备
yum -y install gcc gcc-c++ make
yum -y install pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx
创建nginx程序用户
wget http://common-software.oss-cn-hangzhou.aliyuncs.com/nginx/nginx-1.16.0.tar.gz

解包
tar xf nginx-1.16.0.tar.gz -C /usr/local/src
cd /usr/local/src/nginx-1.16.0/

配置
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

编译,安装
make && make install
nginx1.6 方便查看版本,再创建一个软连接,方便升级和回滚管理版本
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

systemctl,supervisor后台进程管理

编写应用管理nginx
/etc/supervisord.d/nginx.ini

[program:nginx]
;基本配置
directory=/usr/local/nginx ;工作目录
command=/usr/local/nginx/sbin/nginx -g "daemon off;" ;启动程序所使用的命令

;日志管理
stdout_logfile=/work/nginx/logs/nginx.log ;stdout"输出到日志文件
stdout_logfile_maxbytes=50MB ;stdout日志文件最大大小
stdout_logfile_backups=10 ;stdout日志文件保留数量
redirect_stderr=true ;将"stderr"重定向到"stdout"
stderr_logfile=/work/nginx/logs/nginx_error.log ;"stderr"输出到错误日志文件
stderr_logfile_maxbytes=50MB ;stderr日志文件最大大小
stderr_logfile_backups=10 ;stderr日志文件保留数量 ;adasdf

;自启动管理
autostart=true ;当"Supervisord"启动时自动启动该程序
startsecs=3 ;完成启动等待时间
startretries=3 ;启动程序重试次数
autorestart=true ;当程序因故障退出时自动重启程序

注:nginx的这个启动命令默认是后台启动,supervisor不能监控后台程序,所以就会一直执行这个命令,不断的启动Nginx,就会报错。 加上-g ‘daemon off;’ 这个参数可解决这问题。

添加日志目录:
mkdir -p /work/nginx/logs/

systemctl,supervisor后台进程管理

常用命令:

systemctl管理superviser角度:
systemctl status supervisord 查看状态
systemctl reload supervisord 重载配置

supervisor下的应用:
supervisorctl update :配置文件supervisord.conf修改后可以使用该命令加载新的配置
supervisorctl reload :重载supervisor所管理程序的配置文件
supervisorctl status:查看所有进程的状态
supervisorctl stop demo:停止demo
supervisorctl start demo:启动demo
supervisorctl restart demo: 重启demo
supervisorctl tail -f demo 查看demo下的日志

项目进程ini文件的一些可配置选项:

[program:nginx]                                    ; 程序名.
command=/usr/sbin/nginx -g 'daemon off;'           ; 启动程序所使用的命令.
process_name=%(program_name)s_%(process_num)02d    ; 程序进程名.
numprocs=1                                         ; 进程数量.
directory=/usr                                     ; 工作目录.
umask=022                                          ; 进程生成文件权限掩码.
priority=999                                       ; 程序启动优先级.

autostart=true                                     ; 当"Supervisord"启动时自动启动该程序.
startsecs=1                                        ; 完成启动等待时间.
startretries=3                                     ; 启动程序重试次数.
autorestart=true                                   ; 当程序因故障退出时自动重启程序.

exitcodes=0                                        ; 程序退出状态码.
stopsignal=TERM                                    ; 程序停止信号. 
stopwaitsecs=10                                    ; 程序停止等待时间,超时则强制退出程序.
stopasgroup=true                                   ; 停止程序进程组.
killasgroup=true                                   ; 强制停止程序进程组.

user=root                                          ; 程序运行用户.
 
redirect_stderr=true                               ; 将"stderr"重定向到"stdout".
stdout_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stdout.log ; "stdout"输出到日志文件中.
stdout_logfile_maxbytes=50MB                       ; stdout日志文件最大大小.
stdout_logfile_backups=10                          ; stdout日志文件保留数量.
;stdout_capture_maxbytes=0                         ; 关闭stdout日志事件捕获功能.
;stdout_events_enabled=false                       ; 关闭stdout日志事件功能.
;stdout_syslog=false                               ; 禁用将stdout输出到syslog.

;stderr_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stderr.log  ; "stderr"输出到日志文件中.
;stderr_logfile_maxbytes=50MB                      ; stderr日志文件最大大小.
;stderr_logfile_backups=10                         ; stderr日志文件保留数量.
;stderr_capture_maxbytes=0                         ; 关闭stderr日志事件捕获功能.
;stderr_events_enabled=false                       ; 关闭stderr日志事件功能.
;stderr_syslog=false                               ; 禁用将stderr输出到syslog.

;environment=A="1",B="2"                           ; 程序内部使用的环境变量.
;serverurl=AUTO                                    ; HTTP Server连接地址.

发布者:LJH,转发请注明出处:https://www.ljh.cool/7465.html

(3)
上一篇 2021年6月1日 上午1:52
下一篇 2021年7月20日 下午6:12

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注