Systemd——CentOS7的init

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

666.png

重载配置文件:# systemctl daemod-reload

启动服务,查看端口,并访问网页

Systemd——CentOS7的init

Systemd——CentOS7的init

Systemd——CentOS7的init

Systemd——CentOS7的init

关闭服务,查看端口情况

Systemd——CentOS7的init

Systemd——CentOS7的init

2、破解centos7口令

启动时任意键暂停启动

按e键进入编辑模式

将光标移动linux16 开始的行,添加内核参数rd.break

按ctrl+x 启动

mount –o remount,rw /sysroot

chroot /sysroot

passwd root

touch /.autorelabel

3、修改默认的启动内核

# vim /etc/default/grub

1001.png

# 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

赞 (0)
megedugaomegedugao
上一篇 2016-09-20 20:41
下一篇 2016-09-20 22:49

相关推荐

  • linux的文件类型

    linux的文件类型 linux其中的一个哲学思想就是一切皆文件,今天我们就来学习一下linux系统中的文件类型。linux不同于windows,有多种多类的文件类型,文件类型的判断也不是以文件的后缀为标准的。linux中一共有七种文件类型,分别是:普通文件、目录、字符设备文件、块设备文件、套接字文件、命名管道文件和符号链接文件。那么接下来我们就分别看看每种…

    Linux干货 2016-10-27
  • 马哥教育网络班21期+第六周课程练习

    马哥教育网络班21期+第6周课程练习 [TOC] vim编辑器使用方法总结 vim编辑器: 简介: vi: visual interface,文本编辑器 vim: vi improved,vi的增强版 文本:ASCII,Unicode, 文本编辑器种类: 行编辑器:sed, 全屏编辑器:nano,vi vim:模式化的…

    Linux干货 2016-08-15
  • 基于Keepalived构建高可用集群配置实例(HA Cluster)

    什么是集群 简单的讲集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。 关于更详细的高可用集群我们在后面再做详解…

    Linux干货 2016-11-03
  • 分区”魔术师”的磁盘管理

    设备文件 I/O Ports: I/O设备地址 一切皆文件: open(), read(), write(), close() 设备类型: 块设备: block,存取单位“块”,磁盘 字符设备: char,存取单位“字符”,键盘 设备文件:关联至一个设备驱动程序,进而能够跟与之对应 硬件设备进行通信 设备号码: 主设备号: major number, 标识设…

    Linux干货 2016-08-29
  • Cent OS 6 编译方式安装LAMP

    细节要求: (1) 三者分离于三台主机; (2) 一个虚拟主机用于提供phpMyAdmin;另一个虚拟主机用于提供wordpress; (3) PHP使用FastCGI+xcache; (4) httpd使用非prefork的mpm模式; 一、CentOS6环境准备 1、OS(CentOS6.8)下开发环境包的安装,编译安装程序包需要使用 #yum grou…

    Linux干货 2017-02-24
  • 系统启动流程相关概念

    前言: 了解系统内核基本知识 内核功能:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能等  用户空间:应用程序其中有进程或者线程 运行中的系统可分为两层:内核空间、用户空间  内核设计流派:  单内核设计:把每种功能集成于一个程序中;例如:linux 微内核设计:每种功能使用一个单独的子系统实现;例如:Window…

    Linux干货 2016-09-19