Ale*_*war 17 boot monitoring services 14.04
我正在寻找一种方法来获取所有服务(/etc/init.d 或 upstart 或 systemd)的列表,这些服务应该正在启动(或已在启动时启动)。
您如何获得所有启动服务的列表?— 我知道这个问题,它建议使用service --status-all.
但这并没有告诉我,哪些服务应该运行。它使用“ 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
Run Code Online (Sandbox Code Playgroud)
两个都关了,但我不知道,那个(桑巴舞)应该开着。
所以…
我如何获得在启动时启动的所有服务的列表?并且,作为扩展,是否有一种简单的方法来获取这些服务的“状态”(如果没有,我将简单地遍历这个列表并运行“service $service status”,或类似的东西)。
谢谢,亚历山大
编辑 2015-05-04: 我在 Ubuntu 14.04 上。
这个问题的主要焦点如下:
但是我想知道,如果在启动时启动的服务仍在运行。
正因为如此,initctl list并没有多大帮助。它并没有真正考虑由/etc/init.d脚本启动的服务(与 中的新贵脚本相比/etc/init)。
列表/etc/rc?.d/S*也无济于事。它将生成一个服务列表,这些服务可能已在给定的运行级别中启动。它没有显示我应该启动的服务是否仍在运行。
基本上,我正在svcs -x为 Ubuntu寻找类似Solaris 的东西。使用svcs -x,如果已启动的服务不再运行,我将有输出。这个,我也需要 Ubuntu。
原因:我想对我们的 Icinga/Nagios 监控系统进行(或多或少......)通用检查,如果服务不再运行,它会提醒我,该服务应该正在运行。由于我们为许多不同的客户提供了许多不同的服务器,因此定义“重要”服务列表并没有真正扩展。
小智 20
所有服务在启动时启动:
initctl list
Run Code Online (Sandbox Code Playgroud)
系统中存在的所有服务的列表:
service --status-all
Run Code Online (Sandbox Code Playgroud)
这是我的单线
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 }'
现在让我们详细了解一下。新贵的职位都存放在了/etc/init/吧?那里的作业都有一行说明它们从哪个运行级别开始。运行级别 2 是正常启动、默认运行级别。因此,如果我们 grep 所有这样的行runlevel,并使用 awk 清理 grep 的输出,以仅匹配start on运行级别为 #2 的行,我们就会得到新贵作业的列表。其余的只是为了格式化需要,将文件名中的 / 替换为空格,并删除这些文件的路径,保留文件名本身。
这!/#/部分是为了解决可能被注释掉的启动指令,这是我亲自手动添加的。
除此之外,/etc/rc2.d(如果我理解正确的话)你有较低优先级的脚本。
粗略的一句话是:
ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}
该文件夹中实际在运行级别 2 上运行的脚本以 S 开头,后跟优先级编号。现在,基本上,我们获取所有以 S 开头的文件,并只列出它们的优先级名称(仍然需要弄清楚如何清理它)。
正如 muru 在评论中正确指出的那样,还有一些/etc/init/*.override文件,它们可能“......修改作业的运行方式,而不必直接修改其配置文件”(init 手册页)
目前,由于我对这些文件没有太多经验,因此我只能建议使用“grep 'manual' /etc/init/*.override”来查看这些 .override 文件以列出被告知要启动的服务手动使用initctl或services命令。