从CentOS7开始,采用systemctl命令管理系统服务,类似Windows的“计算机管理->服务和应用程序->服务”功能
服务的配置文件存放在/usr/lib/systemd/system目录中
重点关注的服务有防火墙(firewalld.service)、远程登陆(sshd.service,SSH协议)、文件传输(vsftpd.service,FTP协议)。
一、systemctl常用命令
systemctl 操作 服务名
(1)启动服务
systemctl start name.service
注意name.service的.service可以省略不写,以下两条命令的效果相同。
systemctl start firewalld #启动防火墙服务
systemctl start firewalld.service #启动防火墙服务
(2)停止服务
systemctl stop name.service
(3)重启服务
如果服务没有启动,就启动它
systemctl restart name.service
(4)查看服务是否已启动
systemctl is-active name.service
(5)查看服务的状态
systemctl status name.service
Loaded:关于服务是否已经加载的信息,文件的绝对路径以及是否被启用的注释
Active:服务是否正在运行,然后是启动时间信息
Process:进程额外信息
Main PID:服务主进程pid
CGroup:Control Groups额外信息
(6)启用开机自启动服务
systemctl enable name.service
(7)禁用开机自启动服务
systemctl disable name.service
(8)查看服务是否为开机自启动
systemctl is-enabled name.service
(9)只重启正在运行中的服务
systemctl try-restart name.service
(10)显示所有的服务状态
systemctl list-units --type service -all
按空格键显示下一页,按q键退出
(11)查看启动成功的服务列表
systemctl list-unit-files|grep enabled
(12)查看启动失败的服务列表
systemctl --failed
(13)查看所有服务的状态
systemctl list-unit-files --type service
按空格键显示下一页,按q键退出
(14)列出在指定服务之前的服务(依赖)
systemctl list-dependencies --after name.service
按空格键显示下一页,按q键退出
二、添加自定义系统服务
(1)准备服务程序:demo
(2)编写自定义的系统服务脚本文件(.sh)
- start.sh: 目录/demo
- restart.sh:
killall 目录/demo
demo
- stop.sh:killall 目录/demo
最后给脚本(.sh)文件赋予可执行权限
chmod +x start.sh restart.sh stop.sh
(3)编写自定义服务的配置文件
系统服务的启动/重启/停止/由它的配置文件决定,把demo服务命名为demo.service
创建服务配置文件/usr/lib/systemd/system/ demo.service,内容如下:
vi /usr/lib/systemd/system/demo.service
三、自定义系统服务配置文件的含义
1、Unit部分
Unit部分是启动顺序与依赖关系
Description字段:给出当前服务的简单描述
Documentation字段:给出文档位置
After字段:表示本服务应该在某服务之后启动
Before字段:表示本服务应该在某服务之前启动
After和Before字段只涉及启动程序,不涉及依赖关系。设置依赖关系,需要使用Wants字段和Requires字段。
Wants字段:表示本服务与某服务之间存在”依赖“关系,如果被依赖的服务启动失败或停止运行,不影响本服务的继续运行。
Requires字段:表示本服务与某服务之间存在”强依赖“关系,如果被依赖的服务启动失败或停止运行,本服务也必须退出。
(2)service部分
Service部分定义如何启动/重启/停止服务
启动类型(Type字段)
Type字段定义启动类型,它可以设置的值如下:
simple(默认值):ExecStart字段启动的进程为主进程
forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程。
oneshot:类似于simple,但只执行一次,Systemd会等它执行完,才启动其他服务。
dbus:类似于simple,但会等待D-Bus信号后启动。
notify:类似于simple,启动结束后发出通知信号,然后Systemd再启动其他服务。
idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。
启动服务(ExecStart字段)
启动服务时执行的命令,可以是可执行程序、系统命令或shell脚本
重启服务(ExecReload字段)
重启服务时执行的命令,可以是可执行程序、系统命令或shell脚本
停止服务(ExecStop)
停止服务时执行的命令,可以是可执行程序、系统命令或shell脚本
如果RemainAfterExit字段设为yes,表示进程退出以后,服务仍然保持执行
(3)Install部分
Install部分定义如何安装这个配置文件,即怎样做到开机启动
WantedBy字段:表示该服务所在的Target
Target的含义是服务组,表示一组服务。如WantedBy=multi-user-target指的是,服务所在的Target是Multi-user.target(多用户模式)
这个设置非常重要,因为执行systemctl enable demo.service命令时,demo.service会被链接到/etc/systemd/system/multi-user.target.wants目录中,实现开机启动的功能
四、使用自定义的服务
(1)重新加载服务配置文件
每次修改了服务配置文件后,需要执行以下命令重新加载服务的配置文件。
systemctl daemon-reload
(2) 启动/停止/重启demo服务
systemctl start demo #启动demo服务
systemctl restart demo #重启demo服务
systemctl stop demo #关闭启动demo服务
(3)把demo服务设置为开机/关机自启动/停止
systemctl is-enabled demo #查看demo服务是否是开机自启动
systemctl enable demo #把demo服务设置为开机自启动