Linux运维笔记
我们一直在努力

Linux systemd小记

【Systemd】

系统启动流程:

    POST
    boot Sequence
    加载Bootloader
    加载kernel + initranfs(initrd)
    挂载根文件系统,运行跟文件系统的第一个程序 rootfs
    运行/sbin/init

    【 init 】:
        CentOS 5:SysV init
        CentOS 6:Upstart
        CentOS 7:Systemd 运行级别在systemd上不存在(有相关兼容运行级别的机制)

Systemd新特性:

    1、系统引导时实现服务并行启动
    2、按需激活进程
    3、系统状态快照
    4、基于依赖关系定义服务控制逻辑

核心概念:unit:

    unit是systemd用来实现其系统管理的最核心概念( 可以把每个unit想象为之前的服务脚本 )
    systemd的单元,unit本身的配置是通过其配置文件进行标示和配置
    文件中主要包含了系统服务程序、监听套接字、保存系统快照以及其他与init相关的信息
    每一类的unit是通过配置文件的扩展名来识别的

    保存至:
        /usr/lib/systemd/system
        /run/systemd/system
        /etc/systemd/system

    unit的类型:
    [类型名称]             [扩展名称]  [存放位置]                              [功能]                     [描述]
    Service unit           .service     /usr/lib/systemd/system       定义系统服务         对应6中/init.d/中的服务脚本
    Target unit            .target                                                     定义模拟实现"运行级别"
    Device unit            .device                                                   定义内核识别的设备,对于设备识别和驱动也是靠systemd来实现的)
    Mount unit            .mount                                                  定义文件系统挂载点
    Socket unit            .socket                                                   表示进程间通信socket文件的
    Snapshot unit       .snapshot                                               管理系统快照
    Swap unit               .swap                                                    标识swap设备
    Automount unit   .automount                                            实现文件系统自动挂载点
    Path unit                .path                                                     用于定义文件系统中的一个文件或目录

Systemd的关键特性:

1、基于socket的激活机制;实现socket与服务程序的分离:
    在系统引导的时候,systemd为系统上所有支持此种激活类型的服务,分别创建需要监听的套接字
    并在服务启动后,立即将套接字传递给这个服务,带来的好处是,不但实现服务并行启动
    而且在服务用不到的时候不启动,但是套接字处于监听状态。(systemd帮助监听套接字,但是服务没启动)
    当有人来访问这个服务时候,systemd可以收到相关请求,将对应服务立即启动起来

2、基于bus的激活机制:
    Linux系统所有那些用debus完成进程间通信的服务,可以在第一次被访问时按需激活

3、基于device的激活机制:
    支持基于device激活的系统服务,可以在特定类型硬件接入到系统来时,如:挂载U盘
    这个时候应该把挂载U盘的挂载服务挂载起来(mount point和auto mount point)

4、基于path的激活机制:
    某个路径变得可用时,或者里面有文件时,如:某个目录里面有文件出现或发生变动,能激活某服务。
    systemd可以监控着你所指定特定文件路径,一旦文件或目录发生变化,立即激活相关方服务

5、支持快照机制:
    systemd能够将当前所有unit状态保存在一个持久存储设备中,在之后的启动,可以从保存的快照持续运行

6、向后兼容SysV init的脚本:
    能够接受 start stop restart status 至少这4个参数的服务脚本

Systemd不兼容特性:

systemctl命令固定不变
systemctl服务与之通信和控制,非由systemd启动的服务
系统服务不会读取任何来自标准输入的数据流

Systemd如何管理系统服务:

命令:systemctl COMMAND name.service

    1、  start       启动服务
    2、  stop        停止服务
    3、  restart     重启服务
    4、  status      查看状态
    5、  try-restart 条件式重启,服务启动了才重启,没启动不做任何操作    rl6:service name condrestart
    6、  is-active   查看服务当前激活的状态                     rl6:chkconfig --list name
    7、  list-units --type service   查看服务类的unit的活动状态情况
    8、  list-units --type service all   查看所有服务类的unit的活动状态情况
    9、  list-units --type all       查看所有类型的unit的活动状态情况
    10、 reload-or-restart       重载或者重启服务 (能重新加载配置文件即重载配置文件,不能重载则重启)
    11、 reload-or-tryrestart        重载或者条件式重启
    12、 mask                禁止设置为开机自启
    13  unmask              取消禁止设置为开机自启

chkconfig命令的对应关系:

                             [ el6 ]:                              [ el7 ]:
    设置开机启动    chkconfig service on    --> systemctl enable service
    设置开机不启动 chkconfig service off   --> systemctl disable service

    查看是否开机自启                systemctl is-enable name.service
    查看所有开机                      chkconfig --list    --> systemctl list-unit-files --type service
    启动的情况

target units:

    unit配置文件:.target来实现

    【 运行级别 】:

                                       [ el6 ]:                [ el7 ]:
        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:图形化界面          runlevel4.target / graphical.target
        6:重启                    runlevel3.target / reboot.target

    【 级别切换 】:

                [ el6 ]:        [ el7 ]:
    设定运行级别      init number --> systemctl isolate name.target

    查询当前运行级别    runlevel    --> systemctl list-units --tpye target

    查询默认级别是什么   /etc/inittab    --> systemctl get default       

    设定默认运行级别    /etc/inittab    --> systemctl set default name.target

    切换至紧急模式                 systemctl rescue    大多数服务没启动但是驱动已经加载

    切换成emergency                    systemctl emergency 驱动不加载,系统不初始化,服务也不启动

其他常用命令:

    关机:     systemctl halt / systemctl poweroff
    重启:     systemctl reboot
    挂起系统:   systemctl suspend    存储系统至内存中
    创建快照:   systemctl hibernate
    创建快照并挂起:systemctl hybrid-sleep

查看服务的依赖关系   systemctl list-dependencies name.service

 

赞(0) 打赏

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址