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
下一篇 2016-09-20

相关推荐

  • Linux的主要发行版及区别

    Linux的主要发行版介绍 主流的发行版 Linux至上世纪90年代基于Unix而诞生,至今其发行版有几百种之多,但其主流的发行版有三个系列。 Debian系 Ubuntu属于Debinan系。 Redhat系CentOS属于Redhat系。Slackware系SUSE Linux即属于Slackware系。 主要区别 软件包管…

    Linux干货 2016-10-29
  • 用户和组管理的命令

    用户管理概念: 用户类别:         管理员,普通用户,(系统用户和登录用户) 组类别:         管理组员,普通用户组         基本组和附加组         私有组,公共组 数…

    Linux干货 2016-12-21
  • btrfs文件系统介绍

    btrfs文件系统介绍 简介        Btrfs(B-tree,ButterFS ,Better FS通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。继ext3/4文件系统之后linux又有了比较强大的文件系统(btrfs文件系统),btrfs…

    系统运维 2016-04-27
  • N25期–第十五周作业

    1、 总结sed和awk的详细用法; 2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符; # sed ‘s@^[[:space:]]\+@@’ /boot/grub/grub.conf 3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符; # sed ‘s@^#[[:space:]]*@@…

    Linux干货 2017-05-08
  • 优云Web新功能发布,邀您在线免费体验!

    你是否还在因为无法通过大数据精准分析需求而烦恼? 你是否还在因为无法直观呈现用户的行为而头大? 你是否还在因为怎么优化页面布局而愁眉苦脸? 正所谓“一图胜千言”,一张色彩缤纷的图片甚至可以给人带来意想不到的收获,优云web作为监控利器,其新功能“热图”可以为您解决这些麻烦! 热图作为优云web的特色功能点,究竟是怎样帮助您更好地了解用户行为的呢,让小编给您一…

    系统运维 2017-01-09
  • 正则表达式

    ##**正则表达式**– 正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换– 分类:– BRE:基本正则表达式,grep sed vi等软件支持。vim有扩展– ERE:扩展正则表达式,egrep(grep -E) sed -r等– PCRE:几乎所有高级语言都是PCR…

    Linux干货 2017-11-07