systemctl 的“工作”和“服务”有什么区别?

systemctl 的“工作”和“服务”有什么区别?

这两个命令的“作业”和“进程” “服务”有什么区别systemctl

root@linuxbox:~# systemctl list-jobs
No jobs running.
root@linuxbox:~# systemctl list-units --type=service --state=running
UNIT                             LOAD   ACTIVE SUB     DESCRIPTION
containerd.service               loaded active running containerd container runtime
docker.service                   loaded active running Docker Application Container Engine
[email protected]               loaded active running Getty on tty1
inetd.service                    loaded active running Internet superserver
ntp.service                      loaded active running Network Time Service
rngd.service                     loaded active running Start entropy gathering daemon (rngd)
[email protected]      loaded active running Serial Getty on ttyPS0
ssh.service                      loaded active running OpenBSD Secure Shell server
syslog-ng.service                loaded active running System Logger Daemon
tftpd-hpa.service                loaded active running LSB: HPA's tftp server
watchdog.service                 loaded active running watchdog daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

11 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

答案1

总括:“jobs”代表请求的“services”或其他 systemd 单元的状态更改。它们仅在服务启动/停止/重新启动等时存在。

服务

用 systemd 的话说,“服务”是受监督的进程组,(主要)通过定义.service单元配置文件。

每个服务(与任何其他 systemd 单元类型一样)都有一个状态,如手册页中所述系统 (1):

单元可能处于“活动”状态(表示已启动、已绑定、已插入……,具体取决于单元类型,请参见下文),也可能处于“非活动”状态(表示已停止、未绑定、已拔出……),以及正在运行的过程中。激活或去激活,即两种状态之间(这些状态称为“激活”、“去激活”)。还可以使用特殊的“失败”状态,该状态与“非活动”非常相似,当服务以某种方式失败时进入(进程在退出时返回错误代码,或崩溃,操作超时,或重新启动次数过多) )。如果进入此状态,则会记录原因,以供以后参考。请注意,各种单元类型可能具有许多附加子状态,这些子状态映射到此处描述的五个广义单元状态。

(现在五个单位状态中添加了“重装”和“维护”,所以总共有七个,但变化不大)

systemctl list-units --type=service --state=running显示所有处于“活动”状态的“运行”子状态的服务,从而完成激活。

工作

“作业”是对 systemd 的状态更改请求。它们仅存在于 RAM 中,并且仅在处理请求时存在。

systemd 中概述了当请求状态更改时(启动或关闭时,使用systemctl start、等)会发生什么systemctl stop原始设计文件:

如果请求启动或关闭某个单元,我们会将其及其所有依赖项添加到临时事务中。然后,我们将验证交易是否一致(即所有单元通过 After/Before 排序是否无循环)。如果不是,systemd 将尝试修复它,并从事务中删除可能消除循环的非必要作业。此外,systemd 会尝试抑制事务中那些会停止正在运行的服务的非必要作业。非必要作业是指原始请求未直接包含但由 Wants 类型的依赖项拉入的作业。最后,我们检查事务的作业是否与已排队的作业相矛盾,然后可以选择中止事务。如果一切顺利并且事务是一致的并且其影响最小化,则它将与所有已经完成的作业合并并添加到运行队列中。

本质上,当egsystemctl start ssh.service运行时,ssh.service会创建启动作业及其所有(尚未运行)依赖项,并将该单元ssh.service置于“激活”状态。

systemctl list-jobs只要服务尚未完成启动或者对于状态更改至关重要的作业失败,您就会在输出中看到这些作业。之后,服务将进入“活动”或“失败”状态。

相关内容