传统的init (rhel5/6) 有两个缺陷:

1) 服务串行启动,服务之间存在依赖关系,必须前一个服务启动完,才能启动下一个.

2) 服务启动依赖脚本,所有功能依赖脚本怎么写,耗时,效率差

 

Systemd ,CentOS7init程序,功能极为强大,内涵多个模块,并且支持如下特性:

1) 支持多种服务启动机制,以实现服务并行启动

i. 可以基于sockt 的激活机制,启动时不需要等服务启动起来,systemd创建相应的socket监听端口,假装”服务”启动了,待有真正访问时再激活服务.

ii. 可以基于Bus的激活机制,发送BUS信号假装服务起来了...

iii. 可以基于path的激活机制,systemd可以监视某个当某个路径,当路径或者其属性改变时激活服务

iv. 可以基于Device的激活机制,监控硬件设备状态,当其变为可用时,触发相应的服务,例如插入U盘启动自动挂载服务.

2) 支持按需激活服务,例如基于Socket的激活机制

3) 支持系统状态快照,支持将服务的进程数据保存至硬盘,下次启动时可直接恢复

 

 

Unit的定义:

systemd可以管理所有的系统资源,不同的资源统称为Unit,这是个配置文件,文件中包含系统服务,监听Socket,服务之间的依赖关系,系统快照... ,Systemd通过此文件控制资源如何启动,停止.

Unit类型:

Service Unit                  以 .service结尾,服务的管理配置文件,类似于服务脚本

Target Unit                       以 .target 结尾,是一堆service文件的集合

Device Unit                  .device 结尾,用于定义内核的设备文件

Mount   Unit                 .mount结尾,用于定义文件系统的挂载点

Socket Unit                  .socke结尾,用于标示进程间的通信socket文件

Snapshot Unit             .snapshot结尾,管理快照的Unit

Swap Unit                   .swap标识swap设备的Unit

AutoMount Unit           automont结尾,文件系统自动挂载.

 

 

2.2.1  systemctl 

服务控制命令:

systemctl  start name.service                                 #启动服务

systemctl status name.service                               #查看服务的状态

systemctl stop name.service                                 #停止服务

systemctl restart  name.service                            #重启服务

systemctl  try-restart  name.service                      #尝试重启服务,如果服务启动则重启,否则不操作.

systemctl  enable  name.service                          #将服务设置为开机自启

systemctl  disable  name.service                          #将服务关闭开机自启

systemctl  mask name.service                              #将服务链接至/dev/null,禁止开机自启

systemctl unmask name.service                          #恢复服务链接,mask命令相反

systemctl list-units --type service                          #查看当前启动的服务

systemctl  list-units --type service  --all                 #查看所有的服务

systemctl list-unit-files --type service                     #查看所有开机自启的服务

systemctl is-enable name.server                         #查看当前服务是否开机启动

systemctl  is-active name.server                         #查看当前服务是否激活启动

 

运行级别控制命令:

rhel5/67的运行级别对应关系:

rhel5/6的运行级别

systemd兼容级别

systemd相对应的运行级别

runlevel0

runlevel0.target

poweroff.target

runlevel1

runlevel1.target

rescue.target

runlevel2

runlevel2.target

multi-user.target

runlevel3

runlevel3.target

multi-user.target

runlevel4

runlevel4.target

multi-user.target

runlevel5

runlevel5.target

graphical.target

runlevel6

runlevel6.target

reboot.target

 

systemctl  list-units --type target                                          #查看已激活的target

systemctl list-units --type target --all                                     #查看所有target

systemctl list-unit-files --type target                                     #查看开机启动的target

 

systemctl  get-default                                                            #查看系统默认启动的target(运行级别)

systemctl    set-default  name.target                                     #设置默认的target(运行级别)

systemctl isolate name.target                                                 #切换运行级别

 

系统控制命令:

systemctl  halt/poweroff                             #关机

systemctl  reboot                                     #重启

systemctl rescue                                     #进入救援模式

systemctl emergency                              #进入紧急模式,rescue更彻底,服务不启动,系统不初始化,驱动不加载

systemctl suspend                                 #暂停系统,类似休眠

systemctl hibernate                                     #冬眠

systemctl  hybrid-sleep                                #混合睡眠

2.2.2  systemd-analyze

systemd-analyze命令主要用于分析启动服务所需要消耗的时间.

systemd-analyze     #查看启动需要消耗的总时间

[root@localhost ~]# systemd-analyze 

Startup finished in 1.521s (kernel) + 1.361s (initrd) + 34.452s (userspace) = 37.334s

 

 

systemd-analyze  blame  #查看每个服务启动所需要消耗的时间

[root@localhost ~]# systemd-analyze 

Startup finished in 1.521s (kernel) + 1.361s (initrd) + 34.452s (userspace) = 37.334s

[root@localhost ~]# systemd-analyze blame 

         14.371s kdump.service

          7.387s NetworkManager-wait-online.service

          7.157s postfix.service

          4.342s firewalld.service

          3.346s systemd-udev-settle.service

          2.940s tuned.service

          1.777s libvirtd.service

          1.659s network.service

          1.106s NetworkManager.service

           946ms sshd.service

           ... ...

 

 

 

2.2.3  journalctl 

systemd统一管理所有的Unit的启动日志,只需要使用journalctl一个命令,即可查看所有unit日志(内核与应用程序服务).

journalctl                         #查看本次开机所有unit的启动日志信息

journalctl  -f                    #实时监控

journalctl -k                    #仅监控内核日志

journalctl -u httpd.service              #查看某个服务的启动日志信息

journalctl -u httpd.service -f           #实时查看httpd的日志信息

journalctl /bin/bash                     #查看有关该应用程序的日志信息

 

2.2.4  localectl

localectl 命令 用于查看修改本地化的一些配置,例如系统语言,键盘映射,布局等

localectl       #查看本地化信息

[root@localhost ~]# localectl 

   System Locale: LANG=en_GB.utf8

       VC Keymap: us

      X11 Layout: us

 

使用相应的命令可进行更改:

[root@localhost ~]# localectl  set-

set-keymap      set-locale      set-x11-keymap 

 

2.2.5  timedatectl

[root@localhost ~]# timedatectl 

      Local time: Tue 2018-04-24 07:16:35 PDT

  Universal time: Tue 2018-04-24 14:16:35 UTC

        RTC time: Tue 2018-04-24 14:16:35

       Time zone: America/Los_Angeles (PDT, -0700)

     NTP enabled: yes

NTP synchronized: yes

 RTC in local TZ: no

      DST active: yes

 Last DST change: DST began at

                  Sun 2018-03-11 01:59:59 PST

                  Sun 2018-03-11 03:00:00 PDT

 Next DST change: DST ends (the clock jumps one hour backwards) at

                  Sun 2018-11-04 01:59:59 PDT

                  Sun 2018-11-04 01:00:00 PST