列出启动时启动的所有服务

列出启动时启动的所有服务

我正在寻找一种方法来获取所有服务(/etc/init.d 或 upstart 或 systemd)的列表,这些服务应该在启动时启动(或已经启动)。

如何获取所有启动服务的列表?— 我知道这个问题,并且它建议使用service --status-all

但这并没有告诉我,哪些服务是应该运行。它使用“ ”参数调用所有 init 脚本status。这是所有可能正在运行的服务的列表。

但我想知道,在启动时启动的服务是否仍在运行。

例子…

我安装了 webfs。但我不想让它在启动时运行。因此我禁用了它:sudo update-rc.d webfs disable。我还安装了 samba,它应该在启动时运行。但它停止了(无论出于什么原因)。sudo service --status-all在这里对我没有帮助:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

两者都关闭了,但我不知道那个(桑巴舞)应该打开。

所以…

我如何获取启动时启动的所有服务的列表?并且,作为扩展,是否有一种简单的方法来获取这些服务的“状态”(如果没有,我将简单地循环遍历此列表并运行“service $service status”或类似的东西)。

谢谢,亚历山大

编辑2015-05-04: 我在使用 Ubuntu 14.04。

这个问题主要关注以下几个方面:

但我想知道,在启动时启动的服务是否仍在运行。

因此,initctl list没有多大帮助。它实际上没有考虑/etc/init.d脚本启动的服务(与 中的 upstart 脚本相比/etc/init)。

列表也/etc/rc?.d/S*无济于事。它会生成可能在给定运行级别启动的服务列表。它不会向我显示应该启动的服务是否仍在运行。

基本上,我正在寻找类似svcs -xSolaris 的 Ubuntu 版本。有了svcs -x,如果已启动的服务不再运行,我就会得到输出。对于 Ubuntu,我也需要这个。

原因:我想对我们的 Icinga/Nagios 监控系统进行(或多或少...)通用检查,如果某个服务不再运行(该服务应该运行),它会提醒我。由于我们为许多不同的客户提供许多不同的服务器,因此定义“重要”服务列表实际上并不方便。

答案1

所有服务在启动时启动:

initctl list

系统中存在的所有服务的列表:

service --status-all

答案2

列出所有服务和相应的运行级别状态 - chkconfig 样式:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

基于交互式文本的编辑列出的所有内容:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

如果没有的话可能必须安装它:

apt install sysv-rc-conf

答案3

以下是我的一句话 grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

可以使用以下方法获得更清晰的输出:grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

现在让我们详细了解一下。Upstart 作业都存储在 中/etc/init/,对吧?那里的作业都有一行说明它们在哪个运行级别启动。运行级别 2 是正常启动的默认运行级别。因此,如果我们 grep 所有显示 的​​行,runlevel并使用 awk 清理 grep 的输出以仅匹配带有start on和运行级别 #2 的行,我们将获得 upstart 作业的列表。其余的只是为了满足格式需要,将文件名中的 / 替换为空格,并删除这些文件的路径,保留文件名本身。

!/#/部分是为了解决可能被注释掉的启动指令,这些指令是我个人手动添加的。

除其他事项外,/etc/rc2.d(如果我理解正确的话)还有一些优先级较低的脚本。

粗略的一句话是: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

该文件夹中实际在运行级别 2 上运行的脚本以 S 开头,后跟优先级数字。现在,基本上,我们获取所有以 S 开头的文件,并仅列出优先级名称(仍然需要弄清楚如何清理它)。

正如 muru 在评论中正确指出的那样,还有/etc/init/*.override一些文件可能“...修改作业的运行方式,而无需直接修改其配置文件”(初始化手册页

目前,由于我对这些文件没有太多经验,我只能建议使用“grep 'manual' /etc/init/*.override”查看那些 .override 文件,以列出需要使用initctlservices命令手动启动的服务。

相关内容