当前位置:   article > 正文

systemctl系统服务管理_systemctl is-active

systemctl is-active

systemctl简介

systemd 拥有丰富的文档。参考 http://0pointer.de/blog/projects/systemd-docs.html

https://lfzyx.org/linux/systemd.html#id3

RHEL6版本及以前,采用的第一个进程都是init.第一个进程非常重要,因为第一个进程要负责后面所有进程的启动,后面其他进程能否启动成功取决于系统能不能正常运行.
通过init进程启动的后续进程都是串行启动的,串行启动就意味着速度慢.
Centos7以后系统默认使用systemctl管理系统服务,采用第一个进程叫做systemd.
该进程相比init来说,采用并行启动后续进程,并行启动意味着速度快.

systemd是在Linux下,与SysVLSB初始化脚本兼容的系统和服务管理器。systemd使用socketD-Bus来开启服务,提供基于守护进程按需启动策略,支持快照系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系的一个更为精细的逻辑控制,拥有更高的并行性能
在这里插入图片描述

systemd可以提供按需启动的能力

sysvinit系统初始化的时候,它会将所有可能用到的后台服务进程全部启动运行。并且系统必须等待所有的服务都启动就绪之后,才允许用户登录。这种做法有两个缺点:

  1. 首先是启动时间过长;
  2. 其次是系统资源浪费。

某些服务很可能在很长一段时间内,甚至整个服务器运行期间都没有被使用过。比如CUPS,打印服务在多数服务器上很少被真正使用到。您可能没有想到,在很多服务器上SSHD也是很少被真正访问到的。花费在启动这些服务上的时间是不必要的;同样,花费在这些服务上的系统资源也是一种浪费。
systemd可以提供按需启动的能力,只有在某个服务被真正请求的时候才启动它。当该服务结束,systemd可以关闭它,等待下次需要时再次启动它

在这里插入图片描述


systemd采用cgroup特性跟踪和管理进程的生命周期

init系统的一个重要职责就是负责跟踪管理服务进程生命周期。它不仅可以启动一个服务,也能够停止服务。这看上去没有什么特别的,然而在真正用代码实现的时候,您或许会发现停止服务比一开始想的要困难。
服务进程一般都会作为守护进程(daemon)在后台运行,为此服务程序有时候会派生(fork)两次。在 UpStart中,需要在配置文件中正确地配置expect小节。这样UpStart通过对fork系统调用进行计数,从而获知真正的精灵进程的PID号。
cgroup已经出现了很久,它主要用来实现系统资源配额管理。cgroup提供了类似文件系统的接口,使用方便。当进程创建子进程时,子进程会继承父进程cgroup。因此无论服务如何启动新的子进程,所有的这些相关进程都会属于同一个cgroupsystemd只需要简单地遍历指定的cgroup即可正确地找到所有的相关进程, 将它们逐一停止即可。


启动挂载点和自动挂载的管理

传统的Linux系统中,用户可以用/etc/fstab文件来维护固定的挂载点。这些挂载点在系统启动过程中被自动挂载,一旦启动过程结束,这些挂载点就会确保存在。这些挂载点都是对系统运行至关重要的 文件系统,比如HOME目录。和sysvinit一样,systemd管理这些挂载点,以便能够在系统启动时自动挂载它们。systemd兼容/etc/fstab文件,您可以继续使用该文件管理挂载点。 有时候用户还需要动态挂载点,比如打算访问DVD内容时,才临时执行挂载以便访问其中的内容,而不访问光盘时该挂载点被取消(umount),以便节约资源。传统地,人们依赖autofs服务来实现这种功能。 systemd内建了自动挂载服务无需另外安装autofs服务,可以直接使用systemd提供的自动挂载管理实现autofs的功能。


实现事务性依赖关系管理

系统启动过程是由很多的独立工作共同组成的,这些工作之间可能存在依赖关系,比如挂载一个NFS 文件系统必须依赖网络能够正常工作。systemd虽然能够最大限度地并发执行很多有依赖关系的工作, 但是类似“挂载NFS”和“启动网络”这样的工作还是存在天生的先后依赖关系,无法并发执行。对 于这些任务,systemd维护一个“事务一致性”的概念,保证所有相关的服务都可以正常启动而不会 出现互相依赖,以至于死锁的情况。


与SysV初始化脚本兼容

UpStart一样,systemd引入了新的配置方式,对应用程序的开发也有一些新的要求。如果systemd 想替代目前正在运行的初始化系统,就必须和现有程序兼容。任何一个Linux发行版都很难为了采用 systemd而在短时间内将所有的服务代码都修改一遍。
systemd提供了和sysvinit以及LSB initscripts兼容的特性。系统中已经存在的服务和进程无需修改。这 降低了系统向systemd迁移的成本,使得systemd替换现有初始化系统成为可能。


能够对系统进行快照和恢复

systemd支持按需启动,因此系统的运行状态是动态变化的,人们无法准确地知道系统当前运行了哪些服务。systemd快照提供了一种将当前系统运行状态保存并恢复的能力。
比如系统当前正运行服务AB,可以用systemd命令行对当前系统运行状况创建快照。然后将进程A停止,或者做其他的任意的对系统的改变,比如启动新的进程C。在这些改变之后,运行systemd快照恢复命令,就可立即将系统恢复到快照时刻的状态,即只有服务AB在运行。
一个可能的应用场景调试:比如服务器出现一些异常,为了调试用户将当前状态保存为快照,然后可以进行任意的操作,比如停止服务等等。等调试结束,恢复快照即可。


systemctl的管理单位-unit

systemd管理的内容不仅有service,systemd管理的单位是unit,service只是unit一种.
我们重点关注servicetarget这两种unit.

systemd开启监督整个系统,是基于unit的概念。unit是由一个与配置文件对应的名字类型组成的(例如:avahi.service unit有一个具有相同名字配置文件,是守护进程Avahi的一个封装单元)。 unit有多重类型,如下表所示:

序号后缀名描述
1.service系统服务,封装守护进程的启动、停止、重启和重载操作,是最常见的一种 Unit 文件
2.automount用于控制自动挂载文件系统,相当于 SysV-init 的 autofs autofs服务
3.device内核识别的设备文件,对于 /dev 目录下的设备,主要用于定义设备之间的依赖关系
4.mount定义系统结构层次中的一个挂载点,可以替代过去的 /etc/fstab 配置文件
5.path在一个文件系统中的文件或目录。用于监控指定目录或文件的变化,并触发其它 Unit 运行
6.scope外部创建的进程。这种 Unit 文件不是用户创建的,而是 Systemd 运行时产生的,描述一些系统服务的分组信息
7.slice一组用于管理系统进程分层组织的units。用于表示一个 CGroup 的树,通常用户不会自己创建这样的 Unit 文件
8.snapshot用于表示一个由 systemctl snapshot 命令创建的 Systemd Units 运行状态快照
9.socket一个进程间通信的Socket。监控来自于系统或网络的数据消息,用于实现基于数据自动触发服务启动
10.swap定义swap设备或者swap文件。
11.target一组systemd units。用于对 Unit 文件进行逻辑分组,引导其它 Unit 的执行。它替代了 SysV-init 运行级别的作用,并提供更灵活的基于特定设备事件的启动方式
12.timersystemd计时器。用于配置在特定时间触发的任务,替代了 Crontab 的功能

systemd unit存储路径

  • RHEL系列service服务文件存放在/usr/lib/systemd/system目录。
  • Debian系列service服务文件存放在/lib/systemd/system/目录下,这个目录有系统自带的服务文件和安装的软件包提供的服务文件。
  • 管理员手工创建单元文件(service文件)建议存放在/etc/systemd/system/目录下,这样可以避免系统升级时对服务文件所做的更改被覆盖
  • 普通用户手工创建单元文件(service文件)建议存放在/etc/lib/systemd/user/目录下
路径描述
/usr/lib/systemd/system/随安装的RPM产生的systemd units。
/run/systemd/system/在运行时创建systemd units。
/etc/systemd/system/由系统管理员创建和管理的systemd units。

查看systemd资源使用率

# 查看systemd资源使用率
systemd-cgtop
  • 1
  • 2

在这里插入图片描述


systemd配置文件

https://eulixos.com/docs/2.0/SecHarden/%E6%8E%88%E6%9D%83%E8%AE%A4%E8%AF%81.html#%E7%A6%81%E6%AD%A2%E9%80%9A%E8%BF%87-ctrl-alt-del-%E9%87%8D%E5%90%AF%E7%B3%BB%E7%BB%9F

# 修改systemd配置文件
vim /etc/systemd/system.conf

# 修改完systemd配置文件后,需要重启systemd进程

# 重新执行systemd守护进程
systemctl daemon-reexec
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

改变运行级别

systemd目标(target)替代了运行级别的概念,提供了更大的灵活性,如您可以继承一个已有的目标, 并添加其他服务,来创建自己的目标。下表列举了systemd下的目标(target)常见runlevel的对应关系。

运行级别systemd目标(target)描述
0runlevel0.target, poweroff.target关闭系统。
1, s, singlerunlevel1.target,rescue.target单用户模式。
2, 4runlevel2.target, runlevel4.target,multi- user.target用户定义/域特定运行级别。默认等同于3。
3runlevel3.target,multi- user.target多用户,非图形化。用户可以通过多个控制台或网络登录。
5runlevel5.target, graphical.target多用户,图形化。通常为所有运行级别3的服务外加图形化登录。
6runlevel6.target,reboot.target重启系统。
emergencyemergency.target紧急Shell。

切换救援与紧急模式

# 改变当前系统为救援模式
systemctl rescue
  • 1
  • 2

这条命令和“systemctl isolate rescue.target”类似。命令执行后会在串口如下打印信息:

> You are in rescue mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode.

> Give root password for maintenance

> (or press Control-D to continue):
  • 1
  • 2
  • 3
  • 4
  • 5
# 改变当前系统为紧急模式
systemctl emergency
  • 1
  • 2

这条命令和“systemctl isolate emergency.target”类似。命令执行后会在串口如下打印信息:

> You are in emergency mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode.

> Give root password for maintenance

> (or press Control-D to continue):
  • 1
  • 2
  • 3
  • 4
  • 5

用户需要重启系统,才能从救援模式或者紧急模式进入正常模式


关闭/暂停/休眠系统

systemd通过systemctl命令可以对系统进行关机重启休眠等一系列操作。当前仍兼容部分Linux常用管理命令,对应关系如下表。建议用户使用systemctl命令进行操作。

Linux常用管理命令systemctl命令描述
haltsystemctl halt关闭系统但不关闭电源)
poweroffsystemctl poweroff关闭系统并关闭电源
rebootsystemctl reboot重启

执行上述命令会给当前所有的登录用户发送一条提示消息。

# --no-wall 执行关机命令时,禁止systemd通知用户
systemctl --no-wall poweroff
  • 1
  • 2

待机休眠

# 使系统待机
systemctl suspend

# 使系统休眠
systemctl hibernate

# 使系统待机且处于休眠状态
systemctl hybrid-sleep
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

systemctl管理target

target是一个box(盒子),装了很多service(服务),也可以理解为target是一组service(服务).
tartget是由服务组成的一类启动目标,systemd可以设置启动目标.
如果systemd指定了一个target作为启动目标,那么下次启动的时候就会启动target里面的所有服务.
在这里插入图片描述


multi-user.target–文本界面的Linux系统

tty0tty1 默认是图形界面,临时切换文本界面后,tty0tty1变成文本界面了

# 改变当前系统的目标,重启不保存
# 临时切换到`文本界面`
systemctl isolate multi-user.target
# 需要等待几分钟
  • 1
  • 2
  • 3
  • 4

graphical.target–图形化界面的Linux系统

# 改变当前系统的目标,重启不保存
# 临时切换到`图形化界面`
systemctl isolate graphical.target
# 需要等待几分钟
  • 1
  • 2
  • 3
  • 4

查看下次启动时加载文本界面还是图形界面

# 查看默认启动的启动目标
# 查看`下次启动时`加载的默认Linux界面`target`
systemctl get-default 

# 查看当前系统所有的启动目标
systemctl list-units --type=target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述


永久设置下次启动时加载的默认target

# 改变系统默认的启动目标,重启保存
# 永久设置图形化界面启动
systemctl set-default graphical.target

# 永久设置文本界面启动
systemctl set-default multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

loginctlsystemd登录控制管理器

systemd登录控制管理器


查看当前用户是否拥有执行systemd的权限

# 查看当前用户是否允许执行systemd
[cesu-c8 devops ~]$ loginctl
SESSION  UID USER   SEAT TTY     
      9    0 root    

# 查看哪些用户可以执行systemd
[cesu-c8 devops ~]$ loginctl list-users 
 UID USER  
   0 root  
1001 devops
2 users listed.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

查看当前用户的systemd配置信息

# 查看当前用户的systemd配置信息
[cesu-c8 devops ~]$ loginctl show-user
  • 1
  • 2

查看用户的systemd的权限

# 查看devops用户的systemd权限
[cesu-c8 devops ~]$ loginctl user-status devops 
devops (1001)
           Since: Tue 2021-11-02 19:58:07 CST; 1h 37min ago
           State: active
        Sessions: *7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

开启普通用户的systemd权限

如果普通用户没有systemd权限,需要执行这个命令开启systemd权限,否则普通用户做的systemd操作是不会生效

# 开启用户的systemd权限
loginctl enable-linger
  • 1
  • 2

普通用户执行systemd

# 创建普通用户的systemd目录来存放service文件
mkdir ~/.config/systemd/user -p
  • 1
  • 2

service文件拷贝到普通用户~/.config/systemd/user目录下

# 普通用户执行systemd重新加载systemd配置
systemctl --user daemon-reload

# 普通用户设置service文件开机自启
systemctl --user enable --now 服务名.service
  • 1
  • 2
  • 3
  • 4
  • 5

systemctl调试

https://developer.aliyun.com/article/875436

# 查看卡住的system服务
systemctl list-jobs
  • 1
  • 2

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/155465
推荐阅读
相关标签
  

闽ICP备14008679号