我有一个Linux主机列表,我想要一个脚本来检查是否在每个主机上安装并访问了一堆Linux存储,然后在存储不适用且在哪个主机上进行回显。我能想到这样做的最好方法是使用pdsh -w ^hostslist "command"
,所以我的脚本看起来像这样:
#!/bin/sh
storages="s1 s2 s3 s4"
host=`hostname`
for storage in ${storages}; do
pdsh -w ^hosts "cd /$storage" 2 > &1 #here I want to save the output of what I get from running this command
然后在同一个脚本中,检查我得到的文件输出是否为空,然后读取它并grep为“没有这样的文件或目录”,如果找到错误消息,则回显该目录不存在在那台主机上。所以它会是这样的
if [ -s 1 ]
then
error=`cat 1 | grep "no such file or direcotry`
if [ -n $error]
then
echo "there is something wrong with $storage in $host"
fi
fi
但我不确定这是否是检查某个主机上是否可以访问存储的最佳方法。这是最好的方法,还是有更好的方法呢?
答案 0 :(得分:0)
由于您有一个主机列表,并且您希望使用pdsh在所有主机中执行任务,我建议您尝试ansible
一个非常基本的实现是首先使用您的真实地址创建inventory创建名为my-inventory
的文件,例如:
[my-hosts]
10.10.1.1
10.10.1.2
10.10.1.3
10.10.1.4
然后,只检查文件是否存在,您可以使用以下内容创建此基本playbook文件check-if-storage-exists.yml
:
---
- hosts: my-hosts
tasks:
- name: Check if file exists
stat:
path: /storage
register: st
- debug:
msg: "path /storage doesn't exist"
when: not st.stat.exists
然后尝试这样:
ansible-playbook -i my-inventory check-if-storage-exists.yml
它可能看起来有点过分但可能值得尝试,因为你可以做更多的事情,例如,你可以使用mount module等。