制作systemd服务

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 取消开机自启

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值