Systemd:
POST –> Boot Sequeue(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs –> /sbin/init
init:
CentOS5:SysV init
CentOS6:Upstart
CentOs7:Systemd
Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
Systemd的新特性:
系统引导时实现服务并启动
按需激活
自动化的服务依赖关系管理
同时采用socket式与D-Bus总线式激活服务
系统状态快照
核心概念:unit<单元>
unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:
/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
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,用于定义文件系统中的一文件或目录
关键特性:
基于socket的激活机制;socket于程序分离
基于bus的激活机制
基于device的激活机制
基于Path的激活机制
系统快照:保存各unit的当前状态信息于持久存储设备中
向后兼容sysv init脚本
/etc/init.d/
不兼容:
systemctl的命令是固定不变的,不可扩展
非由systemd启动的服务,systemctl无法与之通信
管理系统服务:
CentOS7:service类型的unit文件
systemctl命令:
systemctl – Control the systemd system and service manager
systemctl [OPTIONS…] COMMAND [NAME…]
启动:service NAME start ==> systemctl start NAME.service
停止:service NAME stop ==> systemctl stop NAME.service
重启:service NAME restart ==> systemctl restart NAME.service
状态:service NAME status ==> systemctl status NAME.service
条件式重启:service NAME condrestart ==> systemctl try-restart NAME.service
重载或重启服务:systemctl reload-or-restart NAME.service
重载或条件式重启服务:systemctl reload-or-try-restart NAME.service
查看某服务当前激活与否的状态:systemctl is-active NAME.service
查看所有已激活的服务:systemctl list-units –type|-t service
查看所有服务(已激活及未激活):chkconfig –list ==> systemctl list-units –type|-t service –all|-a
设置服务开机自启:chkconfig NAME on ==> systemctl enable NAME.service
禁止服务开机自启:chkconfig NAME off ==> systemctl disable NAME.service
查看某服务是否能开机自启:chkconfig –list NAME ==> systemctl is-enabled NAME.service
查看所有服务的开机自启状态:chkconfig –list ==> systemctl list-unit-files –type service
禁止某服务设定为开机自启:systemctl mask NAME.service
取消此禁止:systemctl unmask NAME.service
查看服务的依赖关系:systemctl list-dependencies NAME.service
杀掉进程:systemctl kill 进程名
服务状态:
systemctl list-units –type service –all 显示状态
loaded:Unit 配置文件已处理
active(running): 一次或多次持续处理的运行
active(exited): 成功完成一次性的配置
active(waiting): 运行中,等待一个事件
inactive: 不运行
enabled: 开机启动
disabled: 开机不启动
static:开机不启动,但可被另一个启用的服务激活
管理target units:
运行级别:
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
级别切换:init N ==> systemctl list-units NAME.target
查看级别:runlevel ==> systemctllist-units –type target
查看所有级别:systemctl list-units -t target -a
获取默认运行级别:systemctl get-default
修改默认运行级别:systemctl set-default NAME.target
切换至紧急救援模式:systemctl rescue
切换至emergency模式:systemctl emergency
其他常用命令:
关机:systemctl halt ,systemctl poweroff
重启:systemctl reboot
挂起:systemctl suspend
快照:systemctl hibernate
快照并挂起:systemctl hybrid-sleep
CentOS7引导顺序:
UEFi 或BIOS 初始化,运行POST 开机自检
选择启动设备
引导装载程序, centos7 是grub2
加载装载程序的配置文件:/etc/grub.d/
/etc/default/grub /boot/grub2/grub.cfg
加载initramfs 驱动模块
加载内核选项
内核初始化,centos7 使用systemd 代替init
执行initrd.target 所有单元,包括挂载/etc/fstab
从initramfs 根文件系统切换到磁盘根目录
systemd 执行默认target 配置,配置文件
/etc/systemd/default.target /etc/systemd/system/
systemd 执行sysinit.target 初始化系统及basic.target 准备操作系统
systemd 启动multi-user.target 下的本机与服务器服务
systemd 执行multi-user.target 下的/etc/rc.d/rc.local
Systemd 执行multi-user.target 下的getty.target 及登入服务
systemd 执行graphical 需要的服务
service unit file:
·文件通常由三部分组成:
[Unit]:定于与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专业选项;此处为Service类型
[Install]:定义由“systemctl enable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
·Unit段的常用选项:
Description:描述信息;意义性描述
After:定义unit的启动次序;表示当前unit应该晚于那些unit启动;其功能与Before相反
Requles:依赖到的其他units;强依赖,被依赖的units无法激活时,当前unit即无法激活
Wants:依赖到的其他units;弱依赖
Conficts:定义units间的冲突关系
·Service段的常用选项:
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型
类型:<常见的是simple forking notify>
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,ExecStartPost
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon 服务意外终止后,会再次自动启动此服务
·Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被那些units所依赖;强依赖
WantsBy:被那些units所依赖;弱依赖
·注意:对于新创建的unit文件或修改了的unit文件,要通知systemc重载此配置文件
# systemctl daemod-reload
服务Unit文件示例:
vim /etc/systemd/system/bak.service
[Unit]
Description=backup my etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start bak
设置内核参数:
设置内核参数 ,只影响当次启动启动时,在linux16 行后添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=recure.target
recure.target比emergency支持更多的功能,例如日志等
修改默认启动项:
修改/etc/default/grub文件可以修改grub2的启动菜单,修改完成后用:
# grub2-mkconfig -o /boot/grub2/grub.cfg
重新生成配置文件
GRUB_DEFAULT=# :默认的启动菜单为那个
启动排错:
文件系统损坏
先尝试自动修复,失败则进入emergency shell,提示用户修复
在/etc/fstab不存在对应的设备和UUID
等一段时间,如不可用,进入emergencyshell
在/etc/fstab不存在对应挂载点
systemd 尝试创建挂载点,否则提示进入emergency shell.
在/etc/fstab不正确的挂载选项
提示进入emergency shell
破解root口令:
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux16 开始的行,添加内核参数rd.break
按ctrl-x 启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
修复GRUB2:
GRUB “the Grand Unified Bootloader”
引导提示时可以使用命令行界面
可从文件系统引导
主要配置文件 /boot/grub2/grub.cfg
修复配置文件
grub2-mkconfig > /boot/grub2/grub.cfg
修复grub
grub2-install /dev/sda BIOS 环境
grub2-install UEFI 环境
练习:
1、为编译安装的httpd服务,实现service unit文件
获取源码包
tar xf httpd-2.4.9.tar.bz2
cd httpd-2.4.9/
./configure –prefix=/usr/local/apache
make
make install
echo "ServerName local.localdomain" /usr/local/apache/conf/httpd.conf
创建service unit文件
vim /etc/systemd/system/apache.service
重载配置文件:# systemctl daemod-reload
启动服务,查看端口,并访问网页
关闭服务,查看端口情况
2、破解centos7口令
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux16 开始的行,添加内核参数rd.break
按ctrl+x 启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
3、修改默认的启动内核
# vim /etc/default/grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
4、启动时临时禁用SELinux
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux16 开始的行,添加内核参数selinux=0
按ctrl+x 启动
5、启动时进入emergency模式
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux16 开始的行,添加内核参数systemd.unit=emergency.target
按ctrl+x 启动
6、删除编译安装的新内核
删除/boot目录下新内核的vmlinuz和initramfs文件
删除/usr/lib/modules/目录下新内核生成的文件
删除/boot/grub2/grub.cfg文件中,新内核生成的菜单
原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/48027