Intereting Posts
Объединить несколько файлов flv? создание последовательности чисел, по одной в строке в файле grep IP-адреса в сценарии ожиданий bash молча выполняет функцию return on (re) объявляет глобальный ассоциативный массив только для чтения Как запустить `Xephyr` без` sleep`-ing Dbus: выход из системы другого пользователя Изображение ddrescue нельзя смонтировать Трубопровод Sox и FFMPEG вместе Сценарий для отправки почты с использованием функции Количество обратных косых черт, необходимых для экранирования обратного слэжа регулярного выражения в командной строке вверх показывает огромное количество вместо процента памяти Как я могу проверить, что ключ PGP импортирован в RPM? удалить строки, где значение поля меньше или равно 3 – sed или awk? Ssh продолжает просить кодовую фразу несколько раз Как я могу открыть JAVA_HOME для приложений, работающих под X и / или Gnome?

Сценарий оболочки для проверки состояния точки монтирования на сервере linux

Мне нужен сценарий, который должен работать, как показано ниже.

Сценарий, в котором он будет проверять, установлена ​​ли эта конкретная точка монтирования на сервере. Он будет искать имя точки монтирования в /etc/fstab а затем проверять либо из вывода df -h либо /proc/mounts чтобы проверить, смонтирован ли он на сервере (если у вас есть лучший способ проверить, что это тоже хорошо).

После перезагрузки, в случае, если он не будет установлен, он вызовет электронное письмо.

Для одного сервера это нормально, но это будет использоваться для проверки более 1000 серверов, чтобы сценарий был лучшим решением.

Таким образом, сценарий будет выполняться на одном сервере, и он будет проверять статус mountpoint на другом 1000 сервере.

Точка монтирования на сервере находится в имени /mount1 , /mount2 , /mount3 и т. Д. Нам нужно только проверить это конкретное имя точки монтирования, мы можем игнорировать другие связанные с ОС FS.

Что я до сих пор:

 #!/bin/bash # Grep for word mountpoint name ie "mount" awk '{print $2}' /etc/fstab | grep -i "mount" > mntpoint.txt exec 3< mntpoint.txt while read mount <&3 do # Search for present mountpoint in file /prod/mounts. # I'm using /proc/mounts here to validate grep -iw $mount /proc/mounts > /dev/null if [ $? -eq 0 ] then echo $mount "is mounted" else echo $mount "is not mounted needs manual intervention" fi done 

Я бы порекомендовал попробовать это в python. Встроенный модуль os.path имеет очень простую функцию ismount.

 $ cat ismount.py import os mp = '/mount1' if os.path.ismount(mp): print('{0} is mounted'.format(mp)) else: print('{0} is NOT mounted'.format(mp)) $ python ismount.py /mount1 is NOT mounted 

Попробуйте что-то вроде этого. Сначала создайте список IP-адресов сервера (это предполагает, что вы настроили пароль без ssh и можете подключаться как root для всех severs), тогда запустите этот маленький скрипт (скопируйте в командной строке):

 while read ip; do echo "connecting to $ip"; ssh root@$ip "until mount | grep -w \"$MOUNT\" >/dev/null; do echo mounting \"$MOUNT\"; mount \"$MOUNT\"; sleep 1; done && echo Mounted on $ip" done < ips.txt 

Это ожидает файл с именем ips.txt с одним IP на строку. Это будет ssh в IP, и пока mount $MOUNT не будет установлен, он попытается это сделать. Обязательно замените $MOUNT точкой монтирования, которую вы заинтересовали, она должна выглядеть точно так же, как в /etc/fstab . Например:

 while read ip; do echo "connecting to $ip"; ssh root@$ip "until mount | grep -w \"/mnt/data\" >/dev/null; do echo mounting \"/mnt/data\"; mount \"/mnt/data\"; sleep 1; done && echo Mounted on $ip" done < ips.txt 
 #!/bin/bash A=``awk '{print $2}' /etc/fstab | grep -i "^/" | egrep -v '/etc/fstab|proc|sys|shm|pts`'` `for i in $A; do grep $i /proc/mounts > /dev/null` `if [ $? -eq 0 ]; then echo $i "is mounted" else echo $i "is not mounted needs manual intervention" fi done` 

Сценарий, предоставляемый LG, отлично работает, когда вы меняете grep в for-loop на:

 grep "$i " /proc/mounts. 

В этом случае он не вернет ложные срабатывания.