注:从Centos7开始systemd代替了init,使用systemd机制来管理服务
优势:
- 并行处理所有服务,加速开机流程
- 命令相对简单:所有操作均有systemctl命令来执行
- 服务依赖性检测:systemctl命令启动服务时会自动启动依赖服务
一、systemd的配置文件位置
- /usr/lib/systemd/system/:服务启动脚本存放位置
- /run/systemd/system/:系统执行过程中产生的服务脚本
- /etc/systemd/system/:管理员根据自己主机系统需求所创建的执行脚本
注:以sshd服务为例,关闭开机自启动就相当于移除sshd.service文件,设置开机自启动就相当于创建sshd.service文件的软链接
二、systemctl管理服务
注:基本上服务管理命令都是通过systemctl命令来完成的
systemctl:管理服务状态,开机自启动等
格式:systemctl [选项] 服务守护进程名称
选项:
- start:启动服务。
- stop:停止服务。
- restart:重启。
- reload:不关闭服务的情况下,重新读取服务配置文件。
- status:查看指定服务状态。
- enable:开机启动。
- disable:开机不启动。
- is-enabled:查看指定服务是否为开机启动。enable 启动/disable 不启动。
常见后缀:
- .service:用来启动和控制守护进程和进程的服务单元
- .target:执行环境类型,也就是启动流程中的multi-user.target和graphical.target
三、查看系统上所有服务
命令:systemctl
选项:
- list-units:显示当前的unit,添加--all选项则列出启动和未启动的所有unit
- list-unit-files:显示/usr/lib/systemd/system/的unit启用状态
- UNIT:单元名称或服务名称
- LOAD:表示单元是否正确加载
- ACTIVE:表示高级单元激活状态
- SUB:低级单元激活状态,取值决定于单元类型
- DESCRIPTION:简要描述信息
实验
步骤一:显示各种单元,如服务单元、挂载单元、定时计划单元等
步骤二:查看服务单元相对应的状态,可以先安装at服务,然后关闭开机启动,重启服务查看文件
第二列是当前用户设置的是否开机自启动,第三列是系统默认设置
四、切换操作环境
- graphical.target:图形化界面
- multi-user.target:命令行模式
- rescue.target:救援模式
- emergency.target:紧急处理系统的错误,仅限root用户。再无法使用rescue.target 的情况下可以尝试使用此模式
- poweroff.target:关机
- reboot.target:重启
实验
步骤一:切换到命令行模式
步骤二:切换回图形化界面
补充
相较于init命令切换操作环境,init命令显然要更加简单,但如果出现了init 3和5命令失效的情况,可以使用graphical.target和multi-user.target来切换操作环境
五、使用systemctl管理源码包nginx
步骤一:首先安装好nginx,然后启动服务,查看监听80端口
步骤二:查看/usr/lib/systemd/system/sshd.service文件,确定其他服务的配置文件是如何编辑的,仿照编辑nginx配置文件,使得systemctl命令可以找到该文件
步骤三:重载配置文件,然后查看nginx的进程状态,发现未开启,但实际上nginx服务已经通过本地执行文件运行,只是没有被systemctl所记录
步骤四:关闭nginx服务,然后使用systemctl命令重新启动,再查看nginx进程状态
现在nginx服务可以被systemctl命令所调用
步骤五:再将服务设置为开启自启动,发现同样没有什么问题,实验结束
注:如果实验没有正常进行,systemctl start nginx没有办法正常启动服务,报错,则可以试着把SElinux关闭,然后再启动服务[命令:setenforce 0]
补充:设置开机自启动命令的配置文件/etc/rc.d/rc.local, 只要为这个文件设置可执行权限,在这个文件里写入的命令都会在开机的时候自动执行