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

原文地址:https://www.cnblogs.com/shenxm/p/8447756.html

时间: 2024-10-31 16:42:19

centos7的systemd的相关文章

CentOS7/RHEL7 systemd详解

CentOS7/RHEL7 systemd详解 目录1. 为什么是systemd(1) 关于Linux服务管理(2) SysV init的优缺点(3) UpStart的改进(4) systemd的诞生(5)为什么systemd能做到启动很快2. SysV init介绍(1) 什么是SystemV(2)SysV init的运行级别(3)SysV init运行顺序(4)SysV init和系统关闭(5)SysV init的管理和控制功能3. systemd的特性(1)systemd解决了那些问题?(

Centos7特性——systemd

Centos7特性--systemd 理解Linux启动过程 在我们打开Linux电脑的电源后第一个启动的进程就是init.分配给init进程的PID是1.它是系统其他所有进程的父进程.当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制. 主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,8

centos7上systemd详解

centos7上systemd详解 发表于 2016-06-07 |  分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率.但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多. CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:/u

centos7 中 systemd systemctl管理服务的命令

背景: centos7 和 6的重大改变 对于系统管理员而言,系统的服务管理是一件很日常和很重要的工作,而7在6的基础上有了很大的改变,就连命令都完全不一样了.所以要拥抱变化,学习7是如何进行服务的管理和控制的. system和systemctl的初探 Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器. Systemd是一个系统管理守护进程.工具和库的集合,用于取代System V初始进程.Systemd的功能是用于集中管理和配置类UNIX系统. 在Linu

CentOs7下systemd管理知识要点

centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/systemd这个目录下,配置工具命令位于/bin,和/sbin这两个目录下,预先准备的备用配置文件位于/lib/systemd目录下,还有库文件和帮助手册等等.这是一个庞大的软件包.详情使用rpm -ql systemd即可查看. systemd已经不仅仅是一个启动管理软件,而且是一个综合性的服务管理软件,它

Centos7.2 Systemd 方式编译 Mysql5.7.11

导读 MySQL 5.7 版本的发布,也就是说从现在开始5.7已经可以在生产环境中使用,有任何问题官方都将立刻修复. MySQL 5.7主要特性: 原生支持Systemd 更好的性能:对于多核CPU.固态硬盘.锁有着更好的优化 更好的InnoDB存储引擎 更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MySQL数据库.此外,GTID在线平滑升级也变得可能 更好的优化器:优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MySQL

centos7下systemd实现tomcat多实例

环境: CentOS 7 x86_64 1.安装jdk 1 rpm -ivh jdk-8u60-linux-x64.rpm 2.创建普通用户 1 2 getent group tomcat || groupadd -r tomcat getent passwd tomcat || useradd -r -d /opt -s /bin/nologin tomcat 3.下载tomcat 7 1 2 3 4 5 6 7 8 9 cd /opt wget http: //mirrors .ustc.e

Centos7 之 Systemd

一.由来 历史上,Linux 的启动一直采用init进程. 这种方法有两个缺点. 一是启动时间长.init进程是串行启动,只有前一个进程启动完,才会启动下一个进程. 二是启动脚本复杂.init进程只是执行启动脚本,不管其他事情.脚本需要自己处理各种情况,这往往使得脚本变得很长. 二.Systemd 概述 Systemd 就是为了解决这些问题而诞生的.它的设计目标是,为系统的启动和管理提供一套完整的解决方案. 根据 Linux 惯例,字母d是守护进程(daemon)的缩写. Systemd 这个名

Centos7中systemd的管理

管理服务 安装应用在/etc/systemd/system下会生成一系列应用的配置文件等,系统管理员和用户使用 /usr/lib/systemd/system:发行版打包者使用 时间单位默认是秒,毫秒(ms),分钟(m) service unit file文件组成: [Unit]:描述,依赖关系 Description:描述 After:服务要在After定义的后面的服务启动之后再启动,Before正好相反 Requires:必要的依赖关系,依赖于服务的应用 Wants:弱依赖; Conflic