制作systemctl服务
systemctl list-unit-files 用于列出所有可用的services
Centos7开始,系统服务管理方式发生了很大变化。服务由systemd管理。下面具体介绍下服务的制作过程.本网由编制整理加工而成。更多相关可以参见易点知识库地址为:https://sun.book77.com.
systemed管理笔者最深的是是服务异常处理,可以秒级把异常服务重新拉起。下面具体说明过程:
第一步分: 制作systemd服务
下面以nginx服务测试为例说明:
1.创建/usr/local/nginx/ngx.txt文件
cat ngx.txt
aaa=1111111
bbb=2222222
2.在/usr/lib/systemd/system目录下新建服务,nginx.service
cat nginx.service
[Unit]
Description=The Nginx Server Deamon
Documentation=http://localhost/nginx.txt
After=network.target remote-fs.target nss-lookup.target
#在服务启动之前要启动的服务
[Service]
Type=forking #后台启动
#BusName=
#设置与此服务通讯所使用的D-Bus名称,如果Type=dbus,则必须设置此项
User=root
Group=root
#Nice= #设置进程nice值
#Environment=
#环境变量,key=value形式,例当启动ES时,可以在这里指定java环境变量
EnvironmentFile=/usr/local/nginx/ngx.txt #变量文件,可以通过$key引用
PIDFile=/usr/local/nginx/logs/nginx.pid #设置PIDFile
TimeoutStartSec=30s #启动服务超时时间
RestartSec=100ms #重启前停止时间
TimeoutStopSec=0 #服务停止超时时间,文档:值infinity表示永不超时,测试报错
ExecStartPre=/usr/local/nginx/sbin/nginx -t #启动前执行的脚本
ExecStartPost=/bin/echo $bbb #服务启动执行的脚本
ExecStart=/usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf #可以编写脚本文件,文件中exit
0报错,且ExecStartPre=/usr/local/nginx/sbin/nginx -t报错
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
ExecStopPost=/bin/echo $aaa
#服务停止后执行的脚本,这里的输出可以通过systemctl status nginx查看
Restart=always #不管什么退出原因,都会自动重启除了systemctl stop
KillMode=process #如何停止服务
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#表示多用户命令行状态;graphical.target为图形界面
#Alias= #当前Unit可用于启动的别名
3.加载systemd文件
systemctl daemon-reload
4.开启开机启动
systemctl enable nginx.service
第二部分:参数说明
[Service]部分:
Type:
simple: 默认值,执行ExecStart指定的命令,启动主进程
forking: 以fork方式从父进程创建子进程,创建后父进程会立即退出
oneshot: 一次性进程,Systemd 会等当前服务退出,再继续往下执行
dbus: 当前服务通过D-Bus启动
notify: 当前服务启动完毕,会通知Systemd,再继续往下执行
idle: 若有其他任务执行完毕,当前服务才会运行
Restart:
no: 默认值,表示任何时候都不会被重启
no-success: 表示仅在服务进程正常退出时重启(退出状态码为0)
on-failure: 表示仅在服务进程异常退出时重启(退出状态码非0)
always: 不管什么退出原因,都会自动重启除了systemctl stop
on-abort: 只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog 超时退出,才会重启
KillMode:
control-group(默认值): 当前控制组里面的所有子进程,都会被杀掉
process: 只杀主进程
mixed: 主进程将收到 SIGTERM 信号,子进程收到SIGKILL信号
none: 没有进程会被杀掉,只是执行服务的stop命令
[Unit]部分:
Before:
如果该字段指定的Unit也要启动,那么必须在当前Unit之后启动,不涉及依赖关系
Requires: 当前Unit依赖的其他Unit,如果它们没有运行,当前Unit会启动失败
Wants: 与当前Unit配合的其他Unit,如果它们没有运行,当前Unit不会启动失败
BindsTo: 与Requires类似,它指定的Unit如果退出,会导致当前Unit停止运行
Conflicts: 这里指定的Unit不能与当前Unit同时运行
Condition: 当前Unit运行必须满足的条件,否则不会运行
Assert: 当前Unit运行必须满足的条件,否则会报启动失败
第三部分:systemctl服务命令
systemctl daemon-reload 服务文件变动重新加载
systemctl start nginx 开启服务
systemctl stop nginx 停止服务
systemctl reload nginx.service 重新加载服务,服务运行时才能执行
systemctl restart nginx.service 重启服务
systemctl status nginx.service 查看服务状态
systemctl enable nginx.service 服务到开机自启
systemctl disable nginx.service 取消开机自启
版权声明:本文为CSDN博主「lywsun68」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41285054/article/details/104046563
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!