第一次张贴,请原谅任何遗漏的信息。
我有一个脚本,应该与icinga工作。我需要icinga登录到我的Linux盒子,并运行一个命令,如“脚本“。脚本将运行一个命令,如sudo /etc/init.d/apache 2状态,然后报告回“正在运行或未使用”和退出状态0或2。我'我想知道如何添加另一个命令,并根据给定的主机名运行其中一个命令,其中一半需要运行apache 2,另一半需要运行一个名为dss的进程。我不希望有两个单独的脚本。这是工作脚本,对不起,它是草率的,但我还没有做任何清理,我还不太擅长bash。
以便用户运行脚本。/chkdss 2或
# !/bin/bash
ec=0
ec1=2
var3=run
var4=unused
for host in "$@"
do
var1=`ssh $host sudo /etc/init.d/dss status|awk '{print $6}'`
var2="$( echo $var1 | cut -c 3-5 )"
if [[ "$var2" == "$var3" ]]; then
echo "$host is running"
echo $ec
else
echo "$host is not running"
echo $ec1
fi
done
3条答案
按热度按时间q3qa4bjr1#
有几种方法可以测试一个特定的主机名是apache的还是dss的,你只需要有一个主机名列表,然后检查接收到的主机名是否包含在列表中。
方法1:使用数组
要修改主机列表,只需在数组
apachehosts
和dsshosts
的声明中添加或删除值。方法2:使用
case
在此,您可以编辑每种情况下的样式。
**方法3:**使用
if
这里你修改了
if
条件。我更喜欢其他的方法,因为这个方法编辑起来更复杂,不太清楚,特别是当你的主机列表很长的时候。方法4:主机名的条件
如果你幸运的话,你的主机名会有一些模式。例如,所有的Apache服务器都以字母
ap
开头,所有的dss服务器都在名称中包含dss
,...然后,您可以简单地使用2个if语句来确定哪个是哪个。
注意:hostname
apdss1
在这里会显示为Apache服务器。以前的方法会响应“unknown host”。您的模式必须足够严格以避免不匹配。2ic8powd2#
我有一个类似的任务,使用一个
ssh
请求获得几个报告项。我不得不在singel
ssh
中检索命令:1.完整主机名(FQDN)
1.其Docker主机的IP地址(如果存在),或“无”
我剧本分三个阶段完成
1.从远程主机获取多行信息
结果:
2.处理来自远程主机的多行信息
从远程主机读取各行信息,放入数组
sshResultsArr
中。结果:
3.循环处理每个远程主机
5t7ly7z53#
我能够从我收到的答案中提取一点,并整理出一些效果很好的东西。谢谢你们所有人的答案。