systemd unit管理单元

systemd是现代Linux系统中广泛使用的初始化系统和服务管理器,负责启动和管理系统进程、服务、系统资源等。支持并行启动进程、依赖关系管理、自动重启服务、日志记录等功能。

1、Systemd基本概念

  • Unit:systemd管理的基本单元,每个unit可以表示一个服务、挂载点、设备、套接字等
  • Unit文件:单位的配置文件,通常存放在/etc/systemd/system或/lib/systemd/system/目录,文件名通常以.service、.socket、.target等扩展名结尾。systemd会根据这些配置文件来启动和管理服务 
  • Target:表示一个目标状态,可以是单用户模式、多用户模式,通常以.target文件形式存在。

systemd是Linux系统初始化进程并管理所有进程的父进程,但是只有通过systemd启动的服务进程才会受到Unit管理单元的管理。通过systemctl启动的服务和进程受systemd监控,而手动启动的进程则不在其管理范围内。所以,systemd下的直系子进程可分为两类:受systemd管理的子进程和不受systemd管理的子进程。

例如用户可以通过下面两种方式启动Nginx服务进程
nginx 
systemctl start nginx

但是systemd只能监控管理下面第二种方式启动的nginx服务,第一种方式启动的nginx不能使用systemctl stop nginx来停止

2、systemd常见的服务管理命令 

启动服务

sudo systemctl start <service_name>

停止服务

sudo systemctl stop <service_name>

重启服务

#重启服务有多种

#服务已运行重启,未运行则启动
sudo systemctl restart <service_name>

#服务已运行则重启,未运行则不启动
sudo systemctl try-restart <service_name>

#服务已运行时,如果支持reload,则reload,如果不支持则restart
#服务未运行时,启动
sudo systemctl reload-or-restart <service_nmae>

#服务已运行时,如果支持reload,则reload,如果不支持则restart
#服务未运行时,不启动
sudo systemctl reload-or-try-restart <service_name>

重载服务:服务运行时重新加载服务,服务未运行时不做任何事
 

sudo systemctl reload <service_name>

查看服务状态:

#显示服务的当前状态,包括是否正在运行、最近的日志信息等
sudo systemctl status <service_name>

检查服务是否运行状态

#命令用于检查指定服务的当前活动状态。

sudo systemctl is-active <Service_name>

返回值通常有几种:
1、active:服务正在运行并且处于活动状态,且命令退出码为0
2、inactive:服务为运行或者已被停止.且命令退出码非0
3、failed:服务已启动,但启动过程中发生了错误,服务进入失败状态且命令退出码非0
4、unknown:服务状态无法确定,通常是因为服务名称错误或服务没有配置在systemd中且命令退出码非0

 如何使用退出码:

可以通过echo $?来查看命令的退出状态码。例如:

sudo systemctl is-active nginx

echo $? #输出退出状态码,0表示服务active,非0表示非active

#如果nginx正在运行,echo $?输出0
#如果nginx未运行,echo $?输出3(表示inactive)

检查服务是否处于失败状态

sudo systemctl is-failed <service_name> 

#返回值为0:服务处于failed状态,即服务启动时出现了错误,导致无法正常运行

#返回值非0:服务没有处于failed状态,可能时active、inactive或其他状态,这种状态命令会输出inactive或active,并退出状态码是非0。

静默模式

sudo systemctl --quiet is-active <service_name>
#该命令用于检查指定的服务是否处于活动状态,并且不会输出任何内容,只会通过退出状态码来表示结果。
#命令退出状态码为0即服务处于active状态。
#命令退出状态码3或其他非0状态码处于inactive(未活动)或failed(失败)等其他状态。

列出所有服务:

#列出所有服务的当前状态(活动、失败等)
sudo systemctl list-units --type=sservice

#列出所有已启用的服务
sudo systemctl list-unit-files --type=service

 启用服务(开机自启动):

#设置服务为开机启动

sudo systemctl enable <service_name>

禁用服务(禁止开机启动)

sudo systemctl disable <service_name>

3、查看到服务的状态信息。

sudo systemctl status <service_name>

bash
● <service_name>.service - <Service Description>
   Loaded: loaded (/etc/systemd/system/<service_name>.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2025-02-05 09:00:00 UTC; 1h 15min ago
     Docs: man:<service_name>(8)
 Main PID: 1234 (process_name)
    Tasks: 2 (limit: 4915)
   Memory: 10.0M
   CGroup: /system.slice/<service_name>.service
           └─1234 /usr/bin/<service_name>

对于服务来说,重点关注Active行相关的信息,Active状态信息中包含两项内容

如上面的 active(running),它们也分别对应sysetmctl list-units 输出结果中的ACTIVE和SUB状态信息。

Active(状态):描述了服务的整体状态,即服务是否处于活动或运行状态

Sub(子状态):提供了更具体的信息,描述了服务在细节上的运行情况。他可能是running、exited、start或者是其他状态,告诉我们服务是否正常工作。

这两项信息可以对等地理解为: 小老鼠是否在盒子中(盒子中小老鼠是否还存活)。

ACTIVE: active 和 SUB: running:服务正在运行并且正常工作。
ACTIVE: inactive 和 SUB: dead:服务已经停止,类似盒子里没有小老鼠。
ACTIVE: active 和 SUB: start:服务正在启动中,还没完全启动,类似盒子里有小老鼠,但它还在准备活动。

 第一项状态信息描述systemd是否在监控服务进程,可能的状态值有:

active:如果一个服务已经启动成功,它将成功加入到systemd监控队列(job queue),此后将受到systemd监控和管理,此时该服务的状态为active

failed:如果一个服务在启动过程中失败,进程崩溃、服务启动过程耗时过久导致超时,该服务的状态将处于failed状态。

inactive:当一个服务未启动,或者服务已停止时,该服务的状态处于inactive状态。

activating、deactivating、reloading:有些服务启动、停止可能会消耗一点时间,在启动或停止的过过程中去查看服务状态,看到的状态

第二项状态信息描述被监控进程的进程状态,虽然有很多种状态,但用户通常只需关注其中几项常见的即可。并且这些状态的存在通常都依赖于第一项状态。

running:表明被systemd监控的服务进程正在运行

dead:表明被systemd监控的进程已经结束,在识别到这种状态后就会将其从监控队列释放不在监控,所以第一项的状态也会随之变为inactive。表示服务完全停止,systemd 不再监控该服务。

有几种情况可以让服务进入dead状态:

1、手动kill服务进程

2、systemctl stop <service_name>

3、systemctl kill <service_name>

4、服务进程执行完任务退出。例如一次性的任务进程(例如批处理任务)

     它们执行完任务后会自然退出。在这种情况下,服务进程会结束,systemd 会将其状态更改为 dead,这时服务处于 inactive 状态。

 exited:表示服务正常退出,通常会伴随状态码 0/SUCCESS,但服务仍然保持被 systemd 监控的状态。

active(exited):这种状态就表明服务进程已经消失,但服务进程仍然被systemd监控。

auto-restart:表明服务正在被systemd自动重启,当服务配置文件设置了Restart且符合Reastart规则时systemd会自动重启服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值