传统的init (rhel5/6) 有两个缺陷:
1) 服务串行启动,服务之间存在依赖关系,必须前一个服务启动完,才能启动下一个.
2) 服务启动依赖脚本,所有功能依赖脚本怎么写,耗时,效率差
Systemd ,CentOS7的init程序,功能极为强大,内涵多个模块,并且支持如下特性:
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/6与7的运行级别对应关系:
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