一、开机启动
所有支持systemd的服务,在安装后,会在/usr/lib/systemd/system中添加一个配置文件,如果需要让当前的服务在开机的时候自动启动,则需要执行以下命令,以firewalld为例
systemctl enable firewalld.service
该命令执行完成后,将在/etc/systemd/system目录中添加一个软连接文件,此文件会指向该服务在/usr/lib/systemd/system中的配置文件,开启的时候,systemd会地洞存放在/etc/systemd/system中的所有配置文件的服务。
例如我们enable firewalld.service,则在/etc/systemd/system目录会会创建一个软连接文件dbus-org.fedoraproject.FirewallD1.service的文件,此文件指向/usr/lib/systemd/system/firewalld.service
当disable firewalld.service后,此文件被移除。
二、启动服务
执行systemctl enable后不会使得该服务被马上启动,只有下一次系统重启后才会启动该服务,如果我们需要让服务马上启动,则需要使用start命令,还是以firewalld为例
systemctl start firewalld.service
启动完成后我们使用status命令来查看firewalld服务的状态
systemctl status firewalld.service
status命令输出的内容表示的信息有:
Loaded:Loaded中的disabled或者enable表示该服务是否能够开机启动,同时指明了当前服务对应的配置文件所在的位置,如上图firewalld服务的配置文件是/usr/lib/systemd/system/firewalld.service
Active:表示是否正常运行,是active的状态还是inactive的状态,以及该状态开始的时间
Docs:使用man的帮助信息查看方式
Process:服务运行命令
Main PID:服务的主进程iD
Memory:消耗的内存
CGroup:该进程所在的cgroup,包括其所有子进程
日志块
三、停止服务
停止正在运行的服务可以使用stop命令, 以firewalld服务为例
systemctl stop firewalld
如果该服务无法正常停止,可以使用kill命令
systemctl kill firewalld
如果要重启该服务器,可以使用restart命令
systemctl restart firewalld
四、配置文件
服务的配置文件一般放在/usr/lib/systemd/system中,如果找不到可以直接使用cat命令来查看对应的文件和文件位置,以firewalld服务为例
systemctl cat firewalld
配置文件有几个重要的组成部分:
1. Unit块:
unit块中指明了启动的依赖关系和服务启动的顺序
Description:服务描述信息
Before:表示当前服务应该在指定服务之前启动,如上面表示的就是firewalld服务应该在network-pre.target之前启动
After:表示当前服务应该在指定服务之后启动,如上面表示firewalld服务要在dbus.service和polkit.service服务启动之后启动
Wants:表示当前服务的依赖关系,如上面表示firewalld服务需要network-pre.target
Requires:表示当前服务的依赖关系
Before和After只涉及启动顺序,不涉及依赖关系
Wants和Requires只涉及依赖关系,不涉及启动顺序,默认情况下是同时启动,Wants表示弱依赖,即依赖的服务启动失败也不影响当前服务的执行,Requires表示强依赖,即依赖的服务启动失败则当前服务也无法运行。
2. Service块:
EnvironmentFile:当前服务的环境参数文件,文件中保存的是key=value的键值对,在服务启动的时候可以以$key的方式来获取,如firewalld服务启动中使用的$FIREWALLD_ARGS就保存在/etc/sysconfig/firewalld文件中
ExecStart:启动进程执行的命令
ExecReload:重启服务执行的命令
ExecStop:停止服务执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令
所有设置之前都可以添加一个-,表示即使发生错误,不影响其他命令的执行,如EnvironmentFile=-/etc/sysconfig/firewalld表示即使没有找到/etc/sysconfig/firewalld文件也不会抛出错误。
Type:启动类型,支持以下类型:
simple(默认值):ExecStart字段启动的进程是主进程
forking:ExecStart字段以fork方式启动,父进程退出,子进程继续执行
oneshot:类似simple,但是只会执行一次,服务不会长期存在
dbus:类似simple,会等待D-Bus信号后启动
notify:类似simple,启动结束后会发出通知信号,然后systemd再启动其他服务
idle:类似simple,但是要等其他任务都执行完成后才启动服务
RemainAfterExit:进程退出后,服务依然保持
KillMode:kill类型,支持以下类型:
control-group:当前控制组里的所有子进程都会被杀死
process:只杀主进程
mixed:主进程会收到SIGTERM信号,子进程收到SIGKILL信号
none:没有进程被杀,只会执行服务的stop字段命令
Restart:restart类型,支持以下类型:
no:退出后不重启
on-success:正常退出后会重启
on-failure:非正常退出后会重启
on-abnormal:被信号终止或者超时重启
on-abort:收到没有捕捉到的信号终止时重启
on-watchdog:超时重启
always:不管什么原因都重启
对于守护进程推荐设置为on-failure
RestartSec:重启服务之前需要等待的second数
3. Install块
Wantedby:表示该服务所在的target
四、修改配置文件后重启
修改配置文件后需要重新加载配置文件重启
systemctl daemon-reload
systemctl restart firewalld