zoukankan      html  css  js  c++  java
  • centos7的systemd

    系统启动流程

    	POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --> /sbin/init
    	init: 
    		CentOS 5: SysV init
    		CentOS 6: Upstart
    		CentOS 7: 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的当前状态信息于持久存储设备中,向后兼容sysv init 脚本
    	不兼容:
    		systemctl 命令固定不变,不可扩展
    		非由systemd 启动的服务,systemctl无法与之通信和控制
    

    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  目录
    

    服务管理

    	centos7几乎一切服务都是由systemctl来管理service unit,centos7之前的service同时仍然兼容。
    ```
    ##运行级别
    ```
    	target units: 
    		unit 配置文件:
    			.target,用于模拟实现运行级别
    		ls /usr/lib/systemd/system/*.target
    		systemctl list-unit-files --type target --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
    	查看依赖性:
    		systemctl list-dependencies graphical.target
    		
    	级别切换:
    		init N ==> systemctl isolate name.target
    		systemctl isolate multi-user.target
    		注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes才能切换,修改文件需执行systemctl daemon-reload 才能生效
    	查看target:
    		systemctl list-units --type target
    	获取默认运行级别:
    		/etc/inittab ==> systemctl get-default
    		runlevel 
    		who -r
    	修改默认级别:
    		/etc/inittab ==> systemctl set-default name.target
    		systemctl set-default multi-user.target
    		ls –l /etc/systemd/system/default.target
    	切换至紧急救援模式:
    		相当于init 1
    		systemctl rescue
    	切换至emergency 模式:
    		systemctl emergency
    	其它常用命令:
    		传统命令init ,poweroff ,halt ,reboot 都成为 systemctl 的软链接
    		关机: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执行/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 需要的服务
    ```
    ##service unit 文件格式
    ```
    	/etc/systemd/system :
    		系统管理员和用户使用
    	/usr/lib/systemd/system :
    		发行版打包者使用
    	相关布尔值
    		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
    	示例:
    		vim /etc/systemd/system/bak.service
    			[Unit]
    			Description=backup /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支持更多的功能,例如日志等
    ```
    ##启动排错
    ```
    	文件系统损坏,先尝试自动修复,失败则进入emergency shell,提示用户修复
    	在/etc/fstab 不存在对应的设备和UUID等一段时间,如不可用,进入emergency shell
    	在/etc/fstab 不存在对应挂载点systemd尝试创建挂载点,否则提示进入emergency shell.
    	在/etc/fstab 不正确的挂载选项提示进入emergency shell
    ```
    ##破解CentOS7 的root 口令
    ```
    	方法一
    		启动时任意键暂停启动
    		按e 键进入编辑模式
    		将光标移动linux16 开始的行,添加内核参数rd.break
    		按ctrl-x 启动
    		mount –o remount,rw /sysroot
    		chroot /sysroot
    		passwd root
    		touch /.autorelabel
    		exit
    		reboot
    	方法二
    		启动时任意键暂停启动
    		按e 键进入编辑模式
    		将光标移动linux16 开始的行,改为rw init=/sysroot/bin/sh
    		按ctrl-x 启动
    		chroot /sysroot
    		passwd root
    		touch /.autorelabel
    		exit
    		reboot
    		
    ```
    ##修复GRUB2
    ```
    	GRUB “the Grand Unified Bootloader” ”
    		引导提示时可以使用命令行界面
    		可从文件系统引导
    	主要配置文件 /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
    ```
  • 相关阅读:
    Cordova 配置文件
    Mac 配置gradle环境变量
    React实现TabBar切换,带动画效果
    【Mac】基于Android Studio搭建cordova开发环境
    Spring之IOC控制反转
    Spring Boot笔记三:Spring Boot之日志
    Spring Boot笔记二:Spring Boot配置文件
    java的代理机制
    Spring Boot笔记一:Spring Boot入门
    Spring Boot笔记
  • 原文地址:https://www.cnblogs.com/shenxm/p/8447756.html
Copyright © 2011-2022 走看看