Systemd相关用法

Systemd相关用法_第1张图片

概述:

CentOS 6和之前版本采用SysVinit的系统启动进程管理体系,一般用户都可通过在/etc/inittab文件的配置,来个性化自己的系统启动序列。但也经常会由于特殊环境的硬件等关系问题,造成其串行的启动进程控制流,因为可能任务的阻塞而影响启动过程。
CentOS 7开始使用Systemd,所以我们必须要了解Systemd.本章将从CentOS 7 的启动流程、Unit、服务管理,启动排错,破解口令以及修复grub2 等方面来介绍Systemd的相关内容。

CentOS6与CentOS7上对服务的管理方式对比总结

Systemd相关用法_第2张图片

systemd:

一、启动流程

 POST –> Boot Sequence –> Bootloader –> kernel + initramfs(initrd) –> rootfs(根切换)
–> /sbin/init
init:
         init:CentOS 5: SysVinit;
         CentOS 6: Upstart;
         CentOS 7: Systemd;
Systemd:
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程;
Systemd新特性
系统引导时实现服务并行启动;
按需启动守护进程;
自动化的服务依赖关系管理;
同时采用socket式与D-Bus总线式激活服务;
系统状态快照。

二、核心概念:unit

 unit由其相关配置文件进行标识,识别和配置;文件中主要包含了系统服务,监听的socket,保存的快照
以及其他的与init相关的信息;这些配置文件主要保在/usr/lib/systemd/system,
/run/systemd/system,/etc/systemd/system
配置文件:
    /usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/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与程序分离;
     基于bus的激活机制;
     基于device的激活机制;
     基于path的激活机制;
     系统快照:保存个unit的当前状态信息于持久存储设备中;
     向后兼容sysv init 脚本;
       /etc/init.d/
不兼容:
     systemctl的命令是固定不变的;
     非由systemd启动的服务,systemctl无法与之通信

三、管理系统服务:

CentOS 7:service类型的unit文件
注意:能兼容早期的服务脚本
    systemctl命令:
    systemctl – Control the systemd system and service manager 
    格式为:systemctl [OPTIONS…] COMMAND [NAME…]
命令对比:
    启动:service NAME start ===》systemctl start NAME.Sservice
    停止:service NAME stop ===》systemctl stop NAME.Sservice
    重启:service NAME restart===》systemctl restart NAME.Sservice
    状态:service NAME status===》systemctl status NAME.Sservice
Systemd相关用法_第3张图片
条件式重启:service NAME condrestart ===>systemctl  try-restart NAME.service
centos 7. 如果服务此前是启动的,就重启,如果没有启动就不管了;
centos 6. 如果服务此前是启动的,就重启,如果没有启动就将它启动
 
重载或重启服务:systemctl reload-or-restart  NAME.service
centos 7  如果没服务支持重载就重载此服务,如果不支持,就重启此服务

重载或条件式重启服务:systemctl reload-or-try-restart  NAME.service
centos 7  如果没服务支持重载就重载此服务,如果不支持,就尝试重启此服务

查看某服务当前激活与否的状态:systemctl is-active NAME.service
Systemd相关用法_第4张图片
查看所有已激活的服务:chkconfig –list ====>systemctl list-units –type service(简写为-t)
Systemd相关用法_第5张图片
查看所有的服务:chkconfig –list ====>systemctl list-units –type service –all (简写为-t,-a)
Systemd相关用法_第6张图片
设置服务开机自启:chkoncfig NAME on ====>systemctl enable NAME.service
禁止服务开机自启:chkoncfig NAME off ====>systemctl disable NAME.service
查看某服务是否能开机自启:chkconfig –list NAME ===>systemctl is-enabled NAME.service
Systemd相关用法_第7张图片
禁止某服务设定为开机自启:systenctl mask NAME.service
取消禁止某服务设定为开机自启:systenctl unmask NAME.service
Systemd相关用法_第8张图片
查看服务的依赖关系:systemctl list-dependencies NAME.service
Systemd相关用法_第9张图片
查看所有服务的开机自启状态:systemctl list-unit-files –type service
Systemd相关用法_第10张图片
杀掉进程:
systemctl kill unitname 进程名
列出失败的服务
Systemd相关用法_第11张图片
服务状态:
systemctl list-units –type service –all 显示状态
Systemd相关用法_第12张图片
loaded:Unit配置文件已处理
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性的配置
active(running):运行中,等待一个事件
inactive:不允许
enbled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活
管理target units:
unit配置文件:.target
ls /usr/lib/systemd/system/*.target
Systemd相关用法_第13张图片
systemctl list-unit-files –type target –all
Systemd相关用法_第14张图片
查看所有级别:systemcl list-units –type target –all
Systemd相关用法_第15张图片
运行级别:
        0====> runlever0.target,poweroff.target
        1====> runlever1.target ,recuse.target
        2====> runlever2.target, multi-user.target
        3====> runlever3.target, multi-user.target
        4====> runlever4.target, multi-user.target
        5====> runlever4.target , graphical.target
        6====> runlever4.target,reboot.target
     级别切换: init N ====>systemctl  isolate NAME.target
        例如:切换到图形界面 :systemctl  isolate graphical.target
查看级别:runlevel who -r ===>systemcl list-units –type target
Systemd相关用法_第16张图片
查看所有级别:systemcl list-units –type target –all
Systemd相关用法_第17张图片
注: 只有/lib/systemd/system/*.target 文件中AllowIsolate=yes  才能切换( 修改文件需执行syste
mctl daemon-reload 才能生效)
    获取默认运行级别:systemctl  get-default
    修改默认运行级别:systemctl  set-default  NAME.target
运行原理其实就是创建和删除软链接文件
Systemd相关用法_第18张图片
    切换值紧急救援模式:systemctl rescue(级别1,会执行/etc/rc.d/init)
    切换值emergency模式:systemctl emergency(最简洁的模式,)
其他常用命令:
    关机:systemctl halt, systemctl poweroff
    重启:systemctl reboot
    挂载:systemctl suspend
    快照:systemctl hibernate
    快照并挂起:systemctl hybrid-sleep
service  unit file:
    相关布尔值,1 、yes 、on 、true  都是开启,0 、no 、off、false 

     文件通常有三部分组成: 
     [Unit] :定义与unit类型无关的通用选项;用于提高unit的描述信息,unit行为及依赖关系等;
     [Service] :定义与特定类型相关的专业选项;此处为service
     [Install] :定义有“systemctl enable”以及“systemctl disable ”命令在实现服务启动和禁用
时用到的一些选项
Systemd相关用法_第19张图片
unit段的常用选项:
          Description:描述信息,意义性描述
          After:定义unit的启动次序;表示当前unit应该晚于那些unit启动;其功能与before相反
          Wants:依赖到的其他units;(弱依赖),被依赖的units无法激活时,当前unit可以激活
          Requies:依赖到的其他units;(强依赖),被依赖的units无法激活时,当前unit即无法激活
Conflicts:定义units间的冲突关系;
service段的常用选项:
type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型
    类型:
     simple:由ExecStart所指明的程序启动起来的服务就是主进程(默认值,这个daemon 主要由Exe
cStart 接的指令串来启动,启动后常驻于内存中)
      forking:由ExecStart所指明的程序启动起来的服务生成的一个子进程将成为主进程,启动完成后,
父进程会退出
       oneshot:与simple 类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
       dbus:与simple 类似,但这个daemon 必须要在取得一个D-Bus的名称后,才会继续运作. 因此
通常也要同时设定BusNname= 才行
      notify:类似于simple,在启动完成后会发送一个通知消息。还需要配合
      idle:与simple 类似,要执行这个daemon 必须要所有的工作都顺利执行完毕后才会执行。
这类的daemon 通常是开机到最后才执行即可的服务
    nvironmentFile:定义环境配置文件(此文件会在Exer之前读取,并为Exec提供变量)
    ExecStart:指明启动unit要运行命令或脚本;ExecStartPre(预运行),ExecStartPost(后运行)
    ExecStop:指明停止unit要运行的命令或脚本
    Restart:当设定Restart=1  时,则当次daemon 服务意外终止后,会再次自动启动此服务
Install段的常用选项
定义由”systemctl enable”以及”systemctl disable”命令在实现服务启动或禁用时用到的一些选项。
          Alias:别名,可使用systemctl command Alias.service
          RequiredBy:被哪些units所依赖(强依赖)
          WantdBy:被哪些units所依赖(若依赖)
          Also:安装本服务的时候还要安装别的相关服务

 注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
 systemctl daemon-reload
    服务Unit文件示例:
        vim /etc/systemd/system/bak.service  (此路径/usr/lib/systemd/system也可以)
            [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
        (mkdir /testdir; vim /testdir/bak.sh:)
            #!/bin/bash
            cp -a /etc/ /testdir/back-`date %F`/
        chmod +x /testdir/bak.sh
        systemctl start atd
        systemctl daemon-reload
        systemctl start bak
CentOS 7引导顺序
1.UEFi 或BIOS 初始化,运行POST开机自检
2.选择启动设备
3.引导装载程序,cetnos 7 是gurb2
4.加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
5.加载initramfs驱动模块
6.加载内核模块
7.内核初始化,centos 7使用systemd代替了init
8.执行initrd.target所有单元,包括挂载/etc/fatab
9.从initramfs根文件系统切换到磁盘根目录
10systemd执行默认target配置,配置文件/etc/systemd/default.target /etc/systemd/system/
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需要的服务
设置内核参数
systemd相关操作的实际效果展示

系统启动时,通过修改grub选项中的相关内核参数,实现启动时进入不同的模式(紧急救援模式、
emergency模式)
在启动时,启动菜单项按e键,然后在linux16行后添加:(设置内核参数,只影响当次启动)
 systemd.unit=emergency.target  emergency模式
 或  systemd.unit=rescure.target    紧急救援模式
 rescure.target 比emergency 支持更多的功能,例如日志等

Systemd相关用法_第20张图片

Systemd相关用法_第21张图片

Systemd相关用法_第22张图片

Systemd相关用法_第23张图片

Systemd相关用法_第24张图片

Systemd相关用法_第25张图片

Systemd相关用法_第26张图片

四、启动排错

文件系统损坏
先尝试自动修复,失败则进入emergency shell,提示用户修复
在 在/etc/fstab 不存在对应的设备和UUID等一段时间,如不可用,进入emergency shell
在/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
Systemd相关用法_第27张图片

Systemd相关用法_第28张图片

Systemd相关用法_第29张图片

Systemd相关用法_第30张图片
1

Systemd相关用法_第31张图片

Systemd相关用法_第32张图片

Systemd相关用法_第33张图片

破坏grub,然后进行修复

Systemd相关用法_第34张图片

Systemd相关用法_第35张图片

Systemd相关用法_第36张图片

你可能感兴趣的:(Systemd相关用法)