[Linux] systemctl命令和service文件

环境:RHEL 7.6

@ systemctl常用命令传送门 => RHEL7.6 起停服务命令(以防火墙为例)https://blog.csdn.net/wy_hhxx/article/details/103034212

@ 路径 /usr/lib/systemd/system 下有很多service文件,例如firewalld.service, sshd.service... 

@ systemctl status <service name> 的输出

[root@xxx ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-03-31 11:47:15 CST; 5s ago
     Docs: man:firewalld(1)
 Main PID: 25793 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─25793 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Mar 31 11:47:14 xxx systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 31 11:47:15 xxx systemd[1]: Started firewalld - dynamic firewall daemon.
[root@xxx ~]#

说明:

Loaded行配置文件的位置,是否设为开机启动,此例是disabled,即开机不启动防火墙
Active行running表示正在运行
Main PID行主进程ID
CGroup块应用的所有子进程
日志块应用的日志

 

 

 

 

 

 

@ systemctl cat命令可以用来查看服务的配置文件

[root@xxx ~]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network-pre.target
Wants=network-pre.target
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)

[Service]
EnvironmentFile=-/etc/sysconfig/firewalld
ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS
ExecReload=/bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput=null
StandardError=null
Type=dbus
BusName=org.fedoraproject.FirewallD1
KillMode=mixed

[Install]
WantedBy=multi-user.target
Alias=dbus-org.fedoraproject.FirewallD1.service
[root@xxx ~]#

说明:

1. [Unit] 定义启动顺序与依赖关系

Description字段service的简单描述
Documentation字段文档位置
Before字段定义应该在哪些服务之前启动,如果network-pre.target需要启动,那么firewalld.service应该在它之前启动
After字段定义应该在哪些服务之后启动,如果dbus.service, polkit.service需要启动,那么firewalld.service应该在它们之后启动
Wants字段表示弱依赖"关系,如果network-pre.target启动失败或停止运行,不影响firewalld.service继续执行
Requires字段表示"强依赖"关系,即如果该服务启动失败或异常退出,那么firewalld.service也必须退出

 

 

 

 

 

 

 

 

 

2. [Service] 定义如何启动当前服务

启动命令EnvironmentFile字段指定当前服务的环境参数文件
ExecStart字段定义启动进程时执行的命令
ExecReload字段重启服务时执行的命令
ExecStop字段停止服务时执行的命令
ExecStartPre字段启动服务之前执行的命令
ExecStartPost字段启动服务之后执行的命令
启动类型Type字段simple(默认值):ExecStart字段启动的进程为主进程
forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
重启行为KillMode字段定义 Systemd 如何停止 sshd 服务
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令
Restart字段定义了 sshd 退出后,Systemd 的重启方式
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启
RestartSec字段表示 Systemd 重启服务之前,需要等待的秒数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. [Install] 定义如何安装这个配置文件,即怎样做到开机启动

WantedBy字段,表示该服务所在的 Target,Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,firewalld 所在的 Target 是multi-user.target。
常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。

执行systemctl enable firewalld.service命令时,firewalld.service的一个符号链接就会放到/etc/systemd/system目录下面的multi-user.target.wants子目录之中

[root@xxx multi-user.target.wants]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@xxx multi-user.target.wants]# ls -l | grep fire
lrwxrwxrwx. 1 root root 41 Mar 31 16:15 firewalld.service -> /usr/lib/systemd/system/firewalld.service
[root@xxx multi-user.target.wants]#
[root@xxx multi-user.target.wants]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@xxx multi-user.target.wants]# ls -l | grep fire
[root@xxx multi-user.target.wants]#

最后,修改配置文件后,需要重新加载配置文件(systemctl daemon-reload),然后重新启动相关服务。

更多配置项参考 https://www.freedesktop.org/software/systemd/man/systemd.service.html

参考资料:
Systemd 入门教程:实战篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
/ Centos7之Systemd(Service文件)详解 https://blog.csdn.net/Mr_Yang__/article/details/84133783

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值