管理systemd
一、systemd介绍
回顾一下centos的启动流程
POST –> Boot Sequence –> Bootloader –> kernel +
initramfs(initrd) –> rootfs –> /sbin/init
在centos7中系统启动的第一个意义上的进程就是init,只不过在centos7上变成了Systemd这个守护进程
Systemd :系统启动和服务器守护进程管理器,负责在系统
启动或运行时,激活系统资源,服务器进程和其它进程
配置文件:
/usr/lib/systemd/system:每个服务最主要的启动脚本
/usr/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行。
/etc/systemd/systemd:管理员建立的执行脚本,类似于/ 于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
二、类型
Systemctl –t help 查看unit 类型
Service unit: 文件扩展名为.service, 用于定义系统服务
Target unit: 文件扩展名为.target ,用于模拟实现“运行级
别”
Device unit: .device, 用于定义内核识别的设备
Mount unit: .mount, 定义文件系统挂载点
Socket unit: .socket, 用于标识进程间通信用的socket 文件,也可在系统启动时,延迟启动服务,实现按需启动
特性:
关键特性:
基于socket 的激活机制:socket 与服务程序分离
基于d-bus 的激活机制:
基于device 的激活机制:
基于path 的激活机制:
系统快照:保存各unit 的当前状态信息于持久存储设备中
向后兼容sysv init 脚本
不兼容:
systemctl 命令固定不变,不可扩展
非由systemd 启动的服务,systemctl 无法与之通信和控制
三、管理服务
管理系统服务:
CentOS 7: service unit
注意:能兼容早期的服务脚本
命令:systemctl COMMAND name.service
启动: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.servic
条件式重启:已启动才重启,否则不做操作
service name condrestart ==> systemctl try-
restart name.service
重载或重启服务:先加载,再启动
systemctl reload-or-restart name.service
重载或条件式重启服务:
systemctl reload-or-try-restart name.service
禁止自动和手动启动:
systemctl mask name.service
取消禁止:
systemctl unmask name.service
四、centos7的引导顺序
(1)UEFi 或BIOS 初始化,运行POST 开机自检
(2)选择启动设备
(3) 引导装载程序, centos7 是grub2
(4) 加载装载程序的配置文件:/etc/grub.d/
(5)/etc/default/grub /boot/grub2/grub.cfg
(6)加载initramfs 驱动模块
(7)加载内核选项
(8)内核初始化,centos7 使用systemd 代替init
(9)执行initrd.target 所有单元,包括挂载/etc/fstab
(10)从initramfs 根文件系统切换到磁盘根目录
(11)systemd 执行默认target 配置,配置文件
/etc/systemd/default.target /etc/systemd/system/
(12) systemd 执行sysinit.target 初始化系统及basic.target 准备操作系统
(13)systemd 启动multi-user.target 下的本机与服务器服务
(14)systemd 执行multi-user.target 下的/etc/rc.d/rc.local
(15)Systemd 执行multi-user.target 下的getty.target 及登入服务
(16) 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“ 命令在实现服务启用或禁用时用到的一些选项
service unit 文件格式
Unit 段的常用选项:
Description :描述信息
After :定义unit 的启动次序,表示当前unit 应该晚于哪些
unit 启动,其功能与Before 相反
Requires :依赖到的其它units ,强依赖,被依赖的units 无法
激活时,当前unit 即无法激活
Wants :依赖到的其它units,弱依赖
Conflicts :定义units
EnvironmentFile :环境配置文件
ExecStart :指明启动unit 要运行命令或脚本的绝对路径
ExecStartPre: : ExecStart 前运行
ExecStartPost: : ExecStart 后运行
ExecStop :指明停止unit 要运行的命令或脚本
Restart :当设定Restart=1 时,则当次daemon 服务意外终
止后,会再次自动启动此服务。
服务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
作业
1、为编译安装的httpd服务,实现service unit文件
添加了service unit之后
服务器没有启动,出现了如下的报错
解决办法:
(1)可以设定httpd.conf文件中的 ServerName,如下:ServerName localhost:80
(2)在 /etc/hosts 中填入自己的主机名称,如下:127.0.0.1 localhost (用户名称)
systemctl daemon-reload
vsystemctl start http
2、破解centos7 口令
答:
(1) 启动时任意键暂停启动
v(2)按 按e 键进入编辑模式
v(3)将光标移动linux16 开始的行,添加内核参数rd.break
v(4)按 按ctrl-x 启动
v(5) mount –o remount,rw /sysroot
v(6)chroot /sysroot
v(7) passwd root
v(8)touch /.autorelabel
3、修改默认的启动内核
答:(1)vim /etc/default/grub
修改GRUB_DEFAULT=saved—-》GRUB_DEFAULT=0
(2)grub2-mkconfig -o /boot/grub2/grub.cfg
4、启动时临时禁用SELinux
5、启动时进入emergency模式
启动时任意键暂停启动,按e 键进入编辑模式;将光标移动linux16 开始的行,添加内核参数systemd.unit=rescue.target 是一个设置基本系统和救援 shell 的特殊 target unit (与运行级1相似);systemd.unit=emergency.target 与传递保留参数的 init=/bin/sh 给系统使系统从该状态启动相似。
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/48426