深入浅析centos7中的systemd
系统启动流程
POST-->BootSequence-->Bootloader-->kernel+initramfs(initrd)-->rootfs-->/sbin/init init: CentOS5:SysVinit CentOS6:Upstart CentOS7:Systemd
systemd
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。 新特性: 系统引导时实现服务并行启动 按需启动守护进程 自动化的服务依赖关系管理 同时采用socket式与D-Bus总线式激活服务 系统状态快照 核心概念:unit unit表示不同类型的systemd对象,通过配置文件进行标识和配置。 文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。 配置文件: /usr/lib/systemd/system: 每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/ /run/systemd/system: 系统执行过程中所产生的服务脚本,比/usr/lib/systemd/system目录优先运行 /etc/systemd/system: 管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比/run/systemd/system目录优先运行 关键特性: 基于socket的激活机制:socket与服务程序分离 基于d-bus的激活机制: 基于device的激活机制: 基于path的激活机制: 系统快照:保存各unit的当前状态信息于持久存储设备中,向后兼容sysvinit脚本 不兼容: systemctl命令固定不变,不可扩展 非由systemd启动的服务,systemctl无法与之通信和控制
Unit类型
Systemctl–thelp查看unit类型 Serviceunit:文件扩展名为.service,用于定义系统服务 Targetunit:文件扩展名为.target,用于模拟实现运行级别 Deviceunit:.device,用于定义内核识别的设备 Mountunit:.mount,定义文件系统挂载点 Socketunit:.socket,用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动 Snapshotunit:.snapshot,管理系统快照 Swapunit:.swap,用于标识swap设备 Automountunit:.automount,文件系统的自动挂载点 Pathunit:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool目录
服务管理
`centos7几乎一切服务都是由systemctl来管理serviceunit,centos7之前的service同时仍然兼容。
运行级别
targetunits: unit配置文件: .target,用于模拟实现运行级别 ls/usr/lib/systemd/system/*.target systemctllist-unit-files--typetarget--all 运行级别: 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 查看依赖性: systemctllist-dependenciesgraphical.target 级别切换: initN==>systemctlisolatename.target systemctlisolatemulti-user.target 注意:只有/lib/systemd/system/*.target文件中AllowIsolate=yes才能切换,修改文件需执行systemctldaemon-reload才能生效 查看target: systemctllist-units--typetarget 获取默认运行级别: /etc/inittab==>systemctlget-default runlevel who-r 修改默认级别: /etc/inittab==>systemctlset-defaultname.target systemctlset-defaultmulti-user.target ls–l/etc/systemd/system/default.target 切换至紧急救援模式: 相当于init1 systemctlrescue 切换至emergency模式: systemctlemergency 其它常用命令: 传统命令init,poweroff,halt,reboot都成为systemctl的软链接 关机:systemctlhalt、systemctlpoweroff 重启:systemctlreboot 挂起:systemctlsuspend 休眠::systemctlhibernate 休眠并挂起:systemctlhybrid-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执行/etc/systemd/system目录下的配置 systemd执行默认target配置,配置文件/etc/systemd/system/default.target 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需要的服务
serviceunit文件格式
/etc/systemd/system: 系统管理员和用户使用 /usr/lib/systemd/system: 发行版打包者使用 相关布尔值 1、yes、on、true都是开启 0、no、off、false都是关闭 时间单位 默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明 serviceunitfile文件通常由三部分组成: [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等 [Service]:与特定类型相关的专用选项;此处为Service类型 [Install]:定义由“systemctlenable”以及"systemctldisable“命令在实现服务启用或禁用时用到的一些选项 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:别名,可使用systemctlcommandAlias.service RequiredBy:被哪些units所依赖,强依赖 WantedBy:被哪些units所依赖,弱依赖 Also:安装本服务的时候还要安装别的相关服务 注意: 对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,可以选择重启 systemctldaemon-reload 示例: vim/etc/systemd/system/bak.service [Unit] Description=backup/etc Requires=atd.service [Service] Type=simple ExecStart=/bin/bash-c"echo/testdir/bak.sh|atnow" [Install] WantedBy=multi-user.target systemctldaemon-reload systemctlstartbak
设置内核参数
只影响当次启动 启动时,在linux16行后添加 systemd.unit=desired.target systemd.unit=emergency.target systemd.unit=recure.target recure.target比emergency支持更多的功能,例如日志等
启动排错
文件系统损坏,先尝试自动修复,失败则进入emergencyshell,提示用户修复 在/etc/fstab不存在对应的设备和UUID等一段时间,如不可用,进入emergencyshell 在/etc/fstab不存在对应挂载点systemd尝试创建挂载点,否则提示进入emergencyshell. 在/etc/fstab不正确的挂载选项提示进入emergencyshell
破解CentOS7的root口令
方法一 启动时任意键暂停启动 按e键进入编辑模式 将光标移动linux16开始的行,添加内核参数rd.break 按ctrl-x启动 mount–oremount,rw/sysroot chroot/sysroot passwdroot touch/.autorelabel exit reboot 方法二 启动时任意键暂停启动 按e键进入编辑模式 将光标移动linux16开始的行,改为rwinit=/sysroot/bin/sh 按ctrl-x启动 chroot/sysroot passwdroot touch/.autorelabel exit reboot
修复GRUB2
GRUB“theGrandUnifiedBootloader”” 引导提示时可以使用命令行界面 可从文件系统引导 主要配置文件/boot/grub2/grub.cfg 修复配置文件 grub2-mkconfig>/boot/grub2/grub.cfg grub2-mkconfig-o/boot/grub2/grub.cfg 修复grub grub2-install/dev/sda(BIOS环境) grub2-install(UEFI环境) 调整默认启动内核 vim/etc/default/grub GRUB_DEFAULT=0
总结
以上所述是小编给大家介绍的centos7中的systemd,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。