systemd守护进程

systemd守护进程

 

1.systemd概述:

  • systemd(system daemon)是系统管理守护进程的缩写;
  • systemd是一种新的linux系统服务管理器,用于替换init系统,可以兼容init开机启动脚本,能够管理系统启动过程和系统服务,一旦启动起来,就将监管整个系统。在centos7系统中,PID1被systemd所占用;
  • systemd可以并行地启动系统服务进程,并且最初仅启动确实被依赖的服务,极大减少了系统的引导时间,这也就是为什么centos7系统启动速度比centos6快许多的原因;
  • systemd的主命令是systemctl ¹,用于管理系统及服务;
说明¹:chkconfig是管理系统服务(service)的命令行工具。所谓系统服务就是随系统启动而启动,随系统关闭而关闭的程序。Centos7使用systemd进程取代了SysV进程(即init脚本启动),所以systemd的主命令systemctl取代了对应的chkconfig命令,即systemctl命令将service和chkconfig命令相结合。
 

2.systemd特性:

  • 系统引导时实现进程并行启动;
  • 按需启动进程;
  • 根据依赖关系进行服务控制;
  • 系统状态快照;

3.systemd关键特性:

  • 基于socket ¹ 的激活机制:socket与程序分离;
  • 基于bus的激活机制; 是一个 低延迟、低开销、高可用性的进程间通信机制;
  • 基于device的激活机制:能监控内核输出的硬件信息,当设备插入时一旦发现就创建设备文件,再自动挂载至某挂载点,如果挂载点不存在还能自动创建;
  • 基于path的激活机制:系统可监控某目录或文件是否存在,如果文件在了立即就能激活一个服务或进程;例如某服务运行中突然崩溃,崩溃时能创建一个log或lock文件;一旦发现这个lock文件立即激活一个程序,如发送报告;
  • 系统快照:能保存各unit的当前状态信息于持久存储设备中;因为systemd的所有管理都是通过unit实现的,回滚时使用;
  • 向后兼容sysv init脚本:放在/etc/init.d/服务脚本也靠systemd来启动;
  • systemctl的命令是固定不变的;不能自定义命令,旧版能自定义如start、stop等命令,在脚本中可随意定义命令使用;而systemctl的命令是固定不变的;
  • 非由systemd启动的服务,systemctl无法与之通信,无法控制此服务;例如启动web进程httpd,直接在命令行键入httpd也能启动,这种服务在CentOS5和6上使用servcie httpd stop有时也能停掉服务,但是systemd就不行,但可自定义unit脚本来实现; 
说明¹:socket:套接字,它是计算机之间进行通信的一种约定或一种方式,是进行网络连接的一种工具。通过socket这种约定
,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。UNIX/Linux程序在执行任何形式的I/O操作时,都是
在读取或者写入一个文件描述符(fd)。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普
通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接,其中网络连接也是一个文件,它也有文件描述符。我们可以
通过socket()函数来创建一个网络连接,或者说打开一个网络文件,socket()的返回值就是文件描述符。有了文件描述符,我
们就可以使用普通的文件操作函数来传输数据了,例如:
• read()函数:读取从远程计算机传来的数据;
• write()函数:向远程计算机写入数据;
• listen()函数:让套接字进入被动监听状态;
• accept()函数:接收客户端请求;
• bind()函数:将套接字与特定的IP地址和端口绑定;
• connect()函数:与客户端建立连接;
……

4.systemd核心概念:unit单元

       unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:
配置文件目录:
• /usr/lib/systemd/system
• /run/systemd/system
• /etc/systemd/system

5.unit单元类型:

unit单元
文件扩展名
解释说明
Service unit
.service
定义系统服务
Target unit
.Target
用于模拟实现"运行级别", 其实是一群unit的集合
Device unit
.device
定义内核识别的设备
Mount unit
.mount
定义文件系统挂载点
Socket unit
.socket
标识进程间通信用到的socket文件
Snapshot unit
.snapshot
管理系统快照
Swap unit
.swap
标识swap设备
Automount unit
.automount
文件系统自动挂载点设备
Path unit
.path
定义文件系统中的一个文件或目录

(1)service unit:

动作
CentOS 6
CentOS 7
启动
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 --t service
查看所有服务(包含未激活)
chkconfig --list systemctl list-units -t NAME.service -a
 
设置服务开机自启
chkconfig NAME on
systemctl enable NAME.service
禁止服务开机自启
chkconfig NAME off
systemctl disable NAME.service
查看某服务是否能开机自启
chkconfig --list NAME
systemctl is-enabled NAME.service
禁止某服务设定为开机自启
--
systemctl mask NAME.service
取消此禁止
--
systemctl umask NAME.service
查看服务依赖关系
--
systemctl list-dependencies NAME.service
service命令语法:systemctl 参数 name[.service]
常用参数:  
• start:启动服务
• stop:停止服务
• restart:重启或启动服务
• try-restart:若服务启动则重启,若服务未启动则不操作
• reload-or-restart:重载或重启服务
• reload-or-try-restart:重载或条件式重启服务
• mask:将服务链接至/dev/null,则服务无法进行开机自启的设定
• unmask:取消将服务链接至/dev/null
• enable:设置服务开机自启动
• disable:关闭服务开机自启动
• status:查询状态和最近状态日志
• is-active:查询服务当前是否启用
• is-enabled:查询服务是否开机自启
• list-dependencies:查询服务的依赖关系
• list-units --type service:查看所有已经启动的服务的信息
• list-units --type service --all:查看所有服务的信息
• list-unit-files --type service:查询所有服务的开机自启状态

(2)target units:

运行级别
对应别名
服务名
 
 
 
 
 
 
 
 
 
 
 
 
 
sysvinit
systemd target
解释说明
0
runlevel0.target
poweroff.target
0
poweroff.target
关闭系统
1
runlevel1.target
rescue.target
1,s,single
rescue.target
单用户模式
2
runlevel2.target
multi-user.target
2,4
multi-user.target
用户定义/域特定运行级别。默认等同于3
3
runlevel3.target
multi-user.target
3
multi-user.target
多用户,非图形界面
4
runlevel4.target
multi-user.target
5
graphical.target
多用户,图形化界面
5
runlevel5.target
graphical.target
6
reboot.target
重启
6
runlevel6.target
reboot.target
emergency
emergency.target
紧急shell
target命令语法:systemctl 参数 name[.target]
常用参数:
• list-units --type:查看当前已装载的target
• isolate:切换当前的target文件
• rescue:切换到紧急救援模式
• emergency:切换到emergency模式,不加载驱动
• get-default:查看默认运行级别
• set-default:设置默认运行级别,设置/etc/systemd/system/default.target

6.unit文件组成:

systemd的unit文件通常由三部分组成:[Unit],[Service]和[Install]。

(1)[Unit]:定义与unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;
• Description:描述信息;
• After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反;
• Requires:依赖的units,此为强依赖,当被依赖的units无法激活时,当前unit即无法激活;
• Wants:依赖的units,弱依赖;
• Conflicts:定义冲突关系;

(2)[Service]:与特定类型相关的专用选项,与unit类型相同,此处为service类型;
• Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型:
  -simple:默认值,执行ExecStart指定的命令,启动主进程;
  -forking:以fork方式从父进程创建子进程,创建后父进程会立即退出;
  -oneshot:一次性进程,systemd会等当前服务退出,再继续往下执行;
  -dbus:当前服务通过D-Bus启动;
  -notify:当前服务启动完毕,会通知systemd再继续往下执行;
  -idle:若有其他任务执行完毕,当前服务才会运行;
• EnvironmentFile:环境配置文件;
• ExecStart:指定启动unit要运行的命令或脚本;
其中ExecStartPre表示启动unit前运行的脚本或命令;ExecStartPost表示启动unit后要运行的命令或脚本;
• ExecStop:指明停止unit要运行的命令或脚本;
• Restart:指定;

(3)[Install]:定义由"systemctl enable|disable"命令在实现服务启动或禁用时用到的一些选项;
• Alias:别名;
• RequiredBy:该服务被哪些units所依赖;强依赖;
• WantedBy:该服务被哪些units所依赖;弱依赖;

7.systemd电源管理:

命令
操作
systemctl reboot
重启机器
systemctl {halt| poweroff}
关机
systemctl suspend
挂起
systemctl hibernate
休眠
systemctl hybrid-sleep
混合休眠模式(快照并挂起)

你可能感兴趣的:(Linux系统学习)