systemd介绍

一、systemd介绍

systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具。
systemd所管理的所有系统资源都称作Unit,通过systemd命令集可以方便的对这些Unit进行管理。比如systemctl、hostnamectl、timedatectl、localctl等命令,这些命令虽然改写了init时代用户的命令使用习惯(不再使用chkconfig、service等命令),但确实也提供了很大的便捷性。
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
在这里插入图片描述


二、systemd特点:

1、最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15…)
2、CentOS7 支持开机并行启动服务,显著提高开机启动效率。
3、CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4、CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5、CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。
6、按需激活进程,系统状态快照;给予依赖关系定义服务控制逻辑。
7、同时采用socket与D-Bus总线式激活服务。


三、核心概念 unit

unit由其相关配置文件进行表示、识别和配置,文件中主要包含了系统服务、监听的socket、保存的快照以及其他与 init相关的信息;这些配置文件主要保存在

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system

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目录。

关键特性:
基于socket的激活机制,socket与程序分离;
基于D-Bus的激活机制;
基于device的激活机制;
基于path的激活机制;
系统快照:保存各unit的当前状态信息于持久化存储设备中;
向后兼容sysv init脚本;/etc/init.d
不兼容:
systemctl的命令是固定不变的;
 非由systemd启动的服务,systemctl无法与之通信;

四、管理系统服务

1、systemd语法:

systemctl [command]    [unit](配置的应用名称)
command可选项
start:启动指定的unit                                      systemctl start nginx
stop:关闭指定的unit                                        systemctl stop nginx
restart:重启指定unit                                       systemctl restart nginx
reload:重载指定unit                                        systemctl reload nginx
enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置  systemctl enable nginx
disable:开机时不自动运行指定unit                             systemctl disable nginx
status:查看指定unit当前运行状态                              systemctl status nginx

2、 systemd配置文件说明
每一个Unit都需要有一个配置文件用于告知systemd对于服务的管理方式
配置文件存放于/usr/lib/systemd/system/,设置开机启动后会在/etc/systemd/system目录建立软链接文件
每个Unit的配置文件默认后缀名为.service
在/usr/lib/systemd/system/目录中分为system和user两个目录,一般将开机不登陆就能运行的程序存在系统服务里,也就是/usr/lib/systemd/system
配置文件使用方括号分成了多个部分,并且区分大小写

systemd相关文件:

服务启动的脚本启动路径    /etc/init.d    /usr/lib/systemd/system
开机自启服务存放路径    /etc/rcN.d      /etc/systemd/system/multi-user.target.wants/
默认运行级别配置文件    /etc/inittab    /etc/systemd/system/default.target
启动: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 
重新加载配置:systemctl reload 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 --type service
 查看所有服务(已激活和未激活):chkconfig --list ==> systemctl list-units -t service --all
 查看服务单元的启动和禁用状态:systemctl list-unit-files -t service
 列出失败的服务:systemctl --failed -t service
 列出所有单元状态:systemctl  或 systemctl list-units
 只显示服务单元的状态:systemctl -t service
 
 显示sshd服务单元:systemctl -l status sshd.service
 验证sshd服务当前是否活动:systemctl is-active sshd
 启动,停止和重启sshd服务
 systemctl start sshd.service
 systemctl stop sshd.service
 systemctl restart sshd.service
 
 
  设置开机自启动: 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 unmask name.service
  
  查看服务的依赖关系: systemctl list-dependencies name.service
  切换至紧急救援模式: systemctl rescue
  切换至emergency模式:systemctl emergency
  
  关机:systemctl halt, systemctl poweroff
  重启:systemctl reboot
  挂起:systemctl suspend
  休眠:systemctl hibernate
  休眠并挂起:systemctl hybrid-sleep

service unit file:
/etc/systemd/system:系统管理员和用户使用
/usr/lib/systemd/system:发型版打包者使用
以“#”开头的行后面的内容会别认为是注释。
相关布尔值,1、yes、on、true都是开启,0、no、off、false都是关闭。
时间单位默认是秒,毫秒(ms)、分钟(m)要显示说明。
文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项,用于提供unit的描述信息、unit行为依赖关系等。
Description:描述信息,意义性描述。
After:定义unit的启动次序;表示当前unit应该晚于哪些 unit启动,其功能与Before 相反。
Requires:依赖其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活。
Wants:依赖到的其它units,弱依赖。
Conficts:定义units之间的冲突关系。

[Service]:与特定类型相关的专用选项。
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型;
类型:
simple:默认值,整个daemon主要由ExecStart接的指令来启动,启动后常驻于内存。
forking :由ExecStart启动的程序透过spawns延伸出其他子进程来作为此daemon的主要服务。原生父进程在启动结束后就终止。
oneshot:与 simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存。
dbus:与simple类似,但是这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。因此通常要同时设置BusName才可以。
notify:在启动完成后会发送一个消息通知。还需要配合NotifyAccess来让systemd接收消息。
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务。
EnvironmentFile:环境配置文件。
ExecStart:指明启动unit要运行的命令或脚本的绝对路径。
ExecStartPre:ExecStart前运行。
ExecStartPost:ExecStart后运行。
ExecStop:指明停止unit要运行的命令或脚本。
Restart:当设定Restart=1时,则当次daemon服务意外终止后,会再次启动此服务。

[Install]:定义由“systemctl enable” 与“systemctl disable”指令在实现服务启动或禁止用到的一些选项。
Alias:指定别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖。
WantedBy:被哪些units所依赖,弱依赖。
Also:安装本服务的时候还要安装别的相关服务。
对于新创建的unit文件或修改了的unit文件,要通知systemd重启此配置文件。
systemctl daemon-reload


五、管理target units

运行级别:

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
切换级别: init n ==> systemctl isolate name.target
查看级别: runlevel ==> systemctl list-units --type target
查看所有级别:systemctl list-units -t target -a
获取默认级别:systemctl get-default
修改默认级别:systemctl set-default name.target

六、实际运行

在这里插入图片描述
在这里插入图片描述

 loaded Unit配置文件已处理
active(running) 一次或多次持续处理的运行
active(exited) 成功完成一次性的配置
active(waiting)运行中,等待一个事件
inactive 不运行
enabled 开机运行
disabled 开机不运行
static 开机不运行,但是可以被另一个启用的服务激活

在这里插入图片描述


七、案例

1、目标
使用systemd机制实现每次开机输出当前登录时间至login.log。
2、login.service文件
在这里插入图片描述

[Unit]
Description=login test

[Service]
Type=simple
ExecStart=/bin/bash -c "date >> ~/login.log"

[Install]
WantedBy=graphical.target

3、重新加载,启动服务
在这里插入图片描述

4、设置开机自启动

systemctl enable login

在这里插入图片描述

5、测试
(1)第一次重启后
在这里插入图片描述

(2)第二次重启后
在这里插入图片描述

(3)第五次重启后

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值