Centos7服务管理与启动流程

Systemd简介
Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
Systemd新特性:
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用socket式与D-bus总线式激活服务
系统状态快照
Centos7的启动过程
POST Boot Sequence BootLoader kernel + initramfs(initrd) rootfs /sbin/init
Init:
Centos5: SysV init
Centos6: Upstart
Centos7: Systemd
Unit 对象
Unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。
配置文件:
/usr/lib/systemd/system: 每个服务最主要的启动脚本配置,类似于之前centos6中的/etc/init.d/
/run/systemd/system/:系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system/:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
Unit类型
Systemctl –t help 查看unit类型
Service unit: 文件扩展名为.service, 用于定义系统服务
Target unit: 文件扩展名为.target,用于模拟实现运行级别
Device unit: .device, 用于定义内核识别的设备
Mount unit: .mount, 定义文件系统挂载点
Socket unit: .socket, 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
Snapshot unit: .snapshot, 管理系统快照
Swap unit: .swap, 用于标识swap设备
Automount unit: .automount,文件系统的自动挂载点
Path unit: .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool 目录
特性
关键特性:
基于socket的激活机制:socket与服务程序分离
基于d-bus的激活机制:
基于device的激活机制:
基于path的激活机制:
系统快照:保存各unit的当前状态信息于持久存储设备中向后兼容sysv init脚本
不兼容:
systemctl命令固定不变,不可扩展
非由systemd启动的服务,systemctl无法与之通信和控制
service unit文件格式
在/etc/systemd/system下的unit文件是系统管理员和用户使用
在/usr/lib/systemd/system下的供发行版打包者使用
在unit文件中,以“#” 开头的行后面的内容会被认为是注释,相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭,时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit file文件通常由三部分组成
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
unit段的常用选项
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
Service段的常用选项
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess 来让Systemd 接收消息
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre:ExecStart前运行
ExecStartPost:ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
Install段的常用选项
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
注意:
对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl daemon-reload
管理服务
管理系统服务
CentOS 7: service unit
注意:能兼容早期的服务脚本
命令:
systemctl COMMAND name.service

服务查看

chkconfig命令的对应关系

其它命令

服务状态
systemctl list-unit-files --type service --all #显示状态
loaded:Unit配置文件已处理
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性的配置
active(waiting):运行中,等待一个事件
inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活
systemctl示例
显示所有单元状态
systemctl 或systemctl list-units
只显示服务单元的状态
systemctl --type=service
显示sshd服务单元
systemctl –l status sshd.service
验证sshd服务当前是否活动
systemctl is-active sshd
启动,停止和重启sshd服务
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
重新加载配置
systemctl reload sshd.service
列出活动状态的所有服务单元
systemctl list-units --type=service
列出所有服务单元
systemctl list-units --type=service --all
查看服务单元的启用和禁用状态
systemctl list-unit-files --type=service
列出失败的服务
systemctl --failed --type=service
列出依赖的单元
systemctl list-dependencies sshd
验证sshd服务是否开机启动
systemctl is-enabled sshd
禁用network,使之不能自动启动,但手动可以
systemctl disable network
启用network
systemctl enable network
禁用network,使之不能手动或自动启动
systemctl mask network
启用network
systemctl unmask network
运行级别
在centOS7上运行级别的含义已经和之前不同了,运行级别就是通过开启关闭不同的服务产生的效果,在从netOS7上,已然由.target来代替运行级别,我们可以称target为目标态,我们可以通过target定制更符合我们工作运行环境。
我们可以通过命令:ls /usr/lib/systemd/system/*.target查看我们的机器上有多少个target

[root@CT731 grub2]#ls /usr/lib/systemd/system/.target
/usr/lib/systemd/system/anaconda.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/bluetooth.target
/usr/lib/systemd/system/printer.target

/usr/lib/systemd/system/reboot.target
/usr/lib/systemd/system/rescue.target
/usr/lib/systemd/system/rpcbind.target
/usr/lib/systemd/system/runlevel0.target
/usr/lib/systemd/system/runlevel1.target
/usr/lib/systemd/system/runlevel2.target

/usr/lib/systemd/system/sleep.target

使用systemctl list-unit-files --type target --all可以查看所有目标态的状态,或者systemctl list-dependencies xxx.target命令查看目标态的依赖性。
[root@localhost ~]# systemctl list-dependencies multi-user.target
multi-user.target
● ├─auditd.service
● ├─chronyd.service
● ├─crond.service
● ├─dbus.service
● ├─irqbalance.service
● ├─network.service
● ├─NetworkManager.service
在centOS7上所谓的目标态,其实就是由各种指定的服务和基础target组合而成的。运行级别与target的对照
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
运行级别的切换
在centOS6上,我们切换级别使用init,在centOS7上虽然也能使用,但是已经不再是原来的程序了,现在我们使用systemctlisolate name.target来切换target。比如,我们想切换到字符界面,我们就可以使用systemctlisolate multi-user.target来进行切换。要想切换运行级别,在/lib/systemd/system/
.target文件中AllowIsolate=yes才可以。(修改文件需执行systemctldaemon-reload才能生效)
在这里插入图片描述

在centOS7上如何查看运行的目标态呢,使用命令systemctl get-default
使用命令systemctl set-default name.target来修改我们的目标态。
我们看一下我们的默认目标态究竟为何物。
[root@CT731 ~]#locate default.target
/etc/systemd/system/default.target
[root@CT731 ~]#ll /etc/systemd/system/default.target
lrwxrwxrwx.1 root root 36Aug2507:06/etc/systemd/system/default.target ->/lib/systemd/system/runlevel3.target
它其实就是创建了一个软链接到指定的target上去了
CentOS7引导顺序
1.UEFi或BIOS初始化,运行POST开机自检
2.选择启动设备
3.引导装载程序, centos7是grub2
4.加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
5.加载initramfs驱动模块
6.加载内核选项
7.内核初始化,centos7使用systemd代替init
8.执行initrd.target所有单元,包括挂载/etc/fstab
9.从initramfs根文件系统切换到磁盘根目录
10.systemd执行默认target配置,配置文件/etc/systemd/system/default.target
11.systemd执行sysinit.target初始化系统及basic.target准备操作系统
12.systemd启动multi-user.target下的本机与服务器服务
13.systemd执行multi-user.target下的/etc/rc.d/rc.local
14.Systemd执行multi-user.target下的getty.target及登录服务
15.systemd执行graphical需要的服务
设置简单的内核参数
设置内核参数,只影响当次启动
启动时,在linux16行后添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=rescue.target
rescue.target 比emergency 支持更多的功能,例如日志等
systemctl default 进入默认target
简单的启动排错
在centOS7中,文件系统损坏,先尝试自动修复,失败则进入emergency shell,提示用户修复
在/etc/fstab不存在对应的设备和UUID等一段时间,如不可用,进入emergency shell
在/etc/fstab不存在对应挂载点,systemd尝试创建挂载点,否则提示进入emergency shell.
在/etc/fstab不正确的挂载选项,提示进入emergency shell
虚拟机环境下破解centOS7 root的口令
1>.破解CentOS7 的root口令方法一
启动时任意键暂停启动
按e键进入编辑模式
将光标移动到linux16开始的行,添加内核参数rd.break
按Ctrl-x启动
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot
2>.破解CentOS7的root口令方法二
启动时任意键暂停启动
按e键进入编辑模式
将光标移动到linux16开始的行,改为rw init=/sysroot/bin/sh
按Ctrl-x启动
chroot /sysroot
passwd root
touch /.autorelabel

(如果你系统没有开启selinux,那么可以不做这一步)

exit
reboot
备注:1. touch /.autorelabel 因为在此情況下,SELinux 並沒有启动,对所有文件的更改,可能会造成文档的context(安全上下文)不正确,为确保开机时重新设定SELinux context,必須在根目录下添加隐藏文件.autorelabel。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mini_Xiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值