На новой работе, после небольшого сбоя, встала задача проверки виртуальных машин, на предмет того — есть ли на них после загрузки файловые системы, смонтированные в режиме ReadOnly. Скрипт должен сообщать о факте наличия таких случаев, либо сообщать что он не смог подключиться к серверу и тогда надо идти проверять его руками (тут возможны варианты- Kernel Panic, остановился на этапе загрузки из за требования провести FSCK… Или это вообще не Linux хост). Откуда такая необходимость? Ну, в настоящий момент у нас 5к+ виртуальных машин и проверять их руками — то еще удовольствие). Конечно, подобную задачу должна решать система мониторинга, но до сего момента, подобная проверка у нас настроена еще не была (да да, знали бы где падать — соломки подстелили бы), а решать задачу надо. В результате решения был рожден следующий скрипт, который в принципе может быть видоизменен под выполнение любых других аналогичных проверок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash file=$1 PASSWORD="XXXXX" for HOST in $(cat $file) do echo -n $HOST" - filesystems in RO:" RESULT=$(sshpass -p $PASSWORD ssh -q -o StrictHostKeyChecking=no root@$HOST 'mount | grep ro, | grep -v tmpfs | wc -l') if [ -z $RESULT ] then echo "Can't connect and check. May be Windows or Kernel Panic" else echo $RESULT fi done |
Суть в том что скрипт, подключаясь по SSH ( хосты он берет из списка), пытается выполнить команду. Результат выполнения- либо число файловых систем в режиме RO, либо ошибка подключения. При условии что вывод скрипта я «сливаю» в текстовый файл, потом очень легко и просто с помощью grep найти по нему — с кем у нас проблемы.
- Несколько НО:
- Да, использую пароль. VM у нас далеко не все продакшен- много тестовых. Для них SSH ключи не используются, т.к. сейчас создали, через час грохнули, доступ может выдаваться много кому и пр. Проще так, тем более что доступ по SSH снаружи закрыт.
- Да, пространства для фантазии и доработки еще много) Но мне пока хватило. Вот и делюсь решением. Дерзайте!