如何返回“on”或“off”: chkconfig --list | grep httpd

如何返回“on”或“off”: chkconfig --list | grep httpd

确保 httpd 在重新启动时自动启动。我只需运行这个命令

chkconfig httpd on

我正在寻找的是一种方法来告诉我这个设置是否是

on or off

而不是这个命令

chkconfig --list | grep httpd

返回这个

httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

我了解级别,但我真正需要的是

 on or off

所以我可以将它插入到脚本中并每天直观地查看打开或关闭,而不是像上面那样复杂的东西。

答案1

来自手册页:

 By  default,  the on and off options affect only runlevels 2, 3, 4, and
   5, while reset and resetpriorities affects all of the  runlevels.   The
   --level option may be used to specify which runlevels are affected.

所以你可以用来awk只提取那些级别(2,3,4,5):

chkconfig --list | grep httpd | awk '{ print $4 }' | cut -d ':' -f 2

$4并通过替换为 ( $5, $6, $7)对其他级别 (3,4,5) 执行相同操作

答案2

chkconfig 实际上只是将符号链接放置到通常在 /etc/init.d 中找到的服务 init 脚本。因此,您可以只检查符号链接是否存在,而不用 grepping 和 awk'ing chkconfig 的输出。

当我执行 a 时chkconfig httpd on,它会创建一个名为 的链接/etc/rc3.d/S85httpd,指向 init.d。chkconfig httpd off删除该链接(并执行更多操作,但这与此处无关)。这可能取决于分布。

所以在bash中你可以这样做[ -f /etc/rc3.d/S85httpd ],如果返回值( $?)是0,则链接存在。如果为 1,则不存在,因此关闭。

答案3

给出的答案将运行级别嵌入到脚本中,而问题似乎要求单个“开”或“关”,这意味着它适用于当前运行级别

而且事实似乎是chkconfig接受一个被忽视的论点,使之变得grep多余。

此外,其格式是一致的,始终将运行级别放在其列表中的开/关项目之前。没有必要计算列数(并将其嵌入到使用该解决方案必须做的工作中)。

考虑到这些,下面是一个在当前运行级别为每个给定服务打印“on”或“off”的脚本:

#!/bin/sh
THIS=$(runlevel | sed -e 's/^. //')
for svc in "$@"
do
  chkconfig --list $svc 2>/dev/null | sed -e 's/^.*'$THIS'://' -e 's/[[:space:]].*//'
done

相关内容