用于检查Linux主机上是否可以访问Linux存储的Shell脚本

时间:2018-03-21 12:53:31

标签: linux shell storage

我有一个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

但我不确定这是否是检查某个主机上是否可以访问存储的最佳方法。这是最好的方法,还是有更好的方法呢?

1 个答案:

答案 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等。