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访权限,将下面的配置:
这样就可以通过 http://ip:9001访问到supervisor的页面功能
项目配置进程
在 /etc/supervisor.conf配置文件的最后一行
可以看到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
编写应用管理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管理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