确保 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