红帽系统管理一 9 章节 控制 服务&守护进程(systemd)

识别自动启动的系统进程

systemd的一些特性和概念:

systemd是Linux系统中初始化系统和服务的管理器。它的目标是提供更快的启动时间,更好的系统资源管理和更简单的系统管理。systemd通过并行启动服务来加快启动时间,并提供了一种简单的方式来管理系统服务。

特性:
1.系统引导时实现服务并行启动
2.按需启动守护进程
3.自动化的服务依赖关系管理:systemd为用户解决了服务间的依赖关系,如果a服务依赖b,在centos6中(没有systemd)未启动b而启动a则会报错
4.同时采用socket式与D-Bus总线式激活服务
5.socket与服务程序分离:在出现systemd后,一些依赖网络的服务被分成了两种资源: .socket和.service。系统可以启动.socket打开端口而不启动.service监听端口,此时.service未启动,由systemd监听打开的端口。
6.向后兼容sysv init脚本
7.使用systemctl命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务systemctl无法与之通信和控制
8.系统状态快照

systemd 使用单元(units)来配置和管理各种系统服务

service unit:文件扩展名为.service,用于定义系统服务
Socket unit:.socket,定义进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
Target unit:文件扩展名为.target,用于模拟实现运行级别
------target和runlevel的对应关系
在这里插入图片描述
Device unit:.device,用于定义内核识别的设备
Mount unit:.mount,定义文件系统挂载点Snapshot unit: .snapshot,管理系统快照Swap unit: .swap,用于标识swap设备
Automount unit: .automount,文件系统的自动挂载点
Path unit:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如: spool目录

常见的单元包括:服务单元,套接字单元,路径单元。

1.服务单元(service):服务单元是 systemd 的核心部分,用于定义和管理系统服务,通常与守护进程相关联。服务单元描述了如何启动、停止、重启和管理特定服务。服务单元通常有一个对应的守护进程,例如 Web 服务器、数据库服务器等。
什么是守护进程?
守护进程(Daemon Process)是一种在后台运行的长期进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在Linux操作系统中,守护进程是非常有用的进程,大多数服务器都使用守护进程来完成很多系统的任务,比如Web服务器httpd等。当Linux系统启动的时候,会启动很多系统服务,这些进程服务是没有终端的,也就是说你把终端关闭了这些系统服务是不会停止的,它们一直运行着,这些服务就是守护进程。

2.套接字单元(Socket Units):
套接字单元用于定义和管理套接字(sockets),这些套接字可以用于系统间进程通信。它们通常与服务单元关联,以便在有连接请求时自动触发服务单元的启动。

3.路径单元(Path Units):
联系: 路径单元用于监视文件或目录的变化,当文件或目录发生变化时,可以触发相关的 systemd 单元。这通常用于监视日志文件、配置文件等。

对于systemd的各种单元(资源),用systemctl命令进行管理,例如,可以通过systemctl -t help 列出可用的单元类型。我们重点关注service socket target(其实就是runlevel)
unit的配置文件:
建议写service文件时,放在/lib/systemd/system

/usr/lib/systemd/system #每个服务最主要的启动脚本设置
/lib/systemd/system #ubutun的对应目录,事实上,在centos7,8和部分的ubutun上,/lib是/usr/lib的软连接

/run/systemd/system
/etc/systemd/system
管理服务单元(service unit)

可以使用systemctl来探索系统当前的状态
运行不带任何参数的systemctl命令将会列出已加载且活动的单元

systemctl

使用以下命令将会列出当前加载的所有服务单元

[root@#test ~]# systemctl list-units --type=service
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service                     loaded active running Security Auditing Service
  chronyd.service                    loaded active running NTP client/server
  crond.service                      loaded active running Command Scheduler
  dbus.service                       loaded active running D-Bus System Message Bus
  getty@tty1.service                 loaded active running Getty on tty1
......

UNIT:服务单元的名称
LOAD:systemd是否正确解析了单元配置并加载到内存中
ACTIVE:单元的高级别激活状态,此信息表明单元是否已成功启动。
SUB:低级别激活状态
DESC:简短描述
在默认情况下,上述命令只列出激活状态为active的服务。–all 选项将列出所有的服务单元,不论状态如何。

[root@#test ~]# systemctl list-units --type=service --all

使用–state=xxx选项,可按照LOAD,ACTIVE,SUB字段的值进行筛选。

注意systemctl list-unit 命令只列出尝试解析并加载到内存中的单元,他并不显示已安装但未启用的单元。要查看所有已安装的单元文件的状态,使用systemctl list-unit-files 命令。

[root@#test ~]# systemctl list-unit-files --type=service
UNIT FILE                                     STATE   
arp-ethers.service                            disabled
auditd.service                                enabled 
autovt@.service                               enabled 
blk-availability.service                      disabled
........
查看服务状态

查看服务状态命令格式

[root@#test ~]#systemctl status name.type

[root@#test ~]# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2023-10-22 08:27:49 CST; 49min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 6568 (sshd)
   CGroup: /system.slice/sshd.service
           └─6568 /usr/sbin/sshd -D

1022 08:27:48 #test systemd[1]: Starting OpenSSH server daemon...
1022 08:27:49 #test sshd[6568]: Server listening on 0.0.0.0 port 2388.
1022 08:27:49 #test sshd[6568]: Server listening on :: port 2388.
1022 08:27:49 #test systemd[1]: Started OpenSSH server daemon.
1022 08:36:53 #test sshd[6782]: Accepted password for root from 192.168.26.1 port 60272 ssh2

Loaded:服务单元是否已加载到内存。
Active:服务单元是否在运行,运行的话运行了多久?
Main PID: 6568 (sshd):服务的主进程ID。

验证服务的状态
系统重服务有哪些状态?

关键字描述
loaded单元配置文件已处理
active(running)服务正在一个或多个持续进程中运行
active(exited)已成功完成一次性配置
active(waiting)运行中,但在等待某事件
inactive不在运行
enabled在系统引导时启动
disabled未设置为系统引导时启动
static无法启用,但可由某一启用的单元启动

验证服务是否正在运行

[root@#test ~]# systemctl is-active sshd.service
active
#active时,$?的值为0

验证服务是否在系统引导时启用(是否开机启动)

[root@#test ~]# systemctl is-enabled sshd.service
enabled

控制系统服务

systemctl COMMAND name.sevice
systemctl kill  name1.sevice
启动和停止服务
[root@#test ~]# systemctl start sshd.service
[root@#test ~]# systemctl start sshd.service

重新启动和重新加载服务。使用restart重启服务,服务的进程ID会改变。reload重新加载服务不会关联新的进程ID,而保持原有ID。

[root@#test ~]# systemctl restart sshd
[root@#test ~]# 
[root@#test ~]# systemctl reload sshd
列出服务的依赖项
[root@#test ~]# systemctl list-dependencies sshd
sshd.service
● ├─sshd-keygen.service
● ├─system.slice
● └─basic.target
●   ├─microcode.service
●   ├─rhel-dmesg.service
屏蔽服务

有时系统安装的不同服务之间可能会存在冲突。屏蔽服务可以防止系统管理员意外启动与当前服务冲突的服务。屏蔽操作会在配置目录中创建指向/dev/null的文件链接,以阻止服务启动。systemctl mask name

[root@#test ~]# systemctl mask sshd.service
Created symlink from /etc/systemd/system/sshd.service to /dev/null.
[root@#test ~]# 
[root@#test ~]# systemctl reload sshd
Failed to reload sshd.service: Unit is masked.

取消屏蔽

[root@#test ~]# systemctl unmask sshd.service
Removed symlink /etc/systemd/system/sshd.service.
[root@#test ~]# 
[root@#test ~]# systemctl reload sshd
[root@#test ~]# 

注意:禁用的服务可以手动启动,或者被其他单元文件启动,但不会在系统引导时自动启动。屏蔽的服务无法手动启动,也不会自动启动。

使服务在系统引导时启动或停止(开机时启动)

systemctl enable NAME 在系统引导时启动服务,此命令会从服务单元(在/usr/lib/systemd/system/sshd.service)创建一个符号链接,指向磁盘上供systemd寻找文件的位置,即(/etc/systemd/system/multi-user.target.wants/sshd.service)。这样在系统引导时就会启动服务了。

[root@#test ~]# systemctl enable sshd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.

禁止服务在系统引导时启动。可以看出,此命令移除了上面创建的硬链接。

[root@#test ~]# systemctl disable  sshd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/sshd.service.

设置开机启动后服务不会立刻启动,需要服务同时也启动,可以

[root@#test ~]# systemctl enable --now sshd.service

注意:ubutun默认安装软件后自动启动软件。

设置运行级别

对应关系

lrwxrwxrwx. 1 root root  15 1120 05:49 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root  13 1120 05:49 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root  17 1120 05:49 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 1120 05:49 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 1120 05:49 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root  16 1120 05:49 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root  13 1120 05:49 /usr/lib/systemd/system/runlevel6.target -> reboot.target
#查看当前运行级别
systemctl get-default
#设置默认运行级别图形化
systemctl set-default graphical.target
......

service文件的格式

推荐放在/lib/systemd/system
格式,其中还可以包含更多的参数以定制更复杂的服务,此处未列出。

[root@guojie ~]# systemctl cat atd.service
# /usr/lib/systemd/system/atd.service
[Unit]
Description=Job spooling tools #描述
After=syslog.target systemd-user-sessions.service #依赖的进程

[Service]
EnvironmentFile=/etc/sysconfig/atd #环境文件,存储了下面的一些变量,如$OPTS
ExecStart=/usr/sbin/atd -f $OPTS #指定:在执行systemctl start atd时,执行的命令是/usr/sbin/atd -f $OPTS
IgnoreSIGPIPE=no

[Install]
WantedBy=multi-user.target #介绍属于哪个target(其实就是属于哪个runlevel,multi-user即runlevel=3)

在修改service文件并保存后,需要重新加载以下服务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值