Управление серверами Linux

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

В итоге я пришел к этому — представляю типовой скрипт удаленного администрирования. Использование скрипта предполагает естественно предварительные манипуляции — авторизация по ключу (много советов бродит по интернету не буду на этом сейчас останавливаться), установка pssh для параллельных запросов ssh.

Работа идет под пользователем adm, для программы projects в папке /opt, для которой существует демон daemon.sh. Программа располагается на двух (чисто для примера) серверах 10.10.10.16 и 10.10.10.18, а новые версии скачиваем с ftp 10.10.10.10. f

#!/bin/sh
#### Подготовка переменных.
### Переменные времени
export xdate=`date +%Y-%m-%d_%H:%M`
### Переменные IP-адресов
# Переменные привязаны ip адресов.
export server16=10.10.10.16
export server18=10.10.10.18
### Инициализация Функций
# функция выбора
vibor_ip ()
{
    ip_1='' ip_2=''
    PS3='Выберите сервера: '
    echo
    while :
    do
    clear
    echo 'Выбраные сервера: $ip_1 $ip_2'
    options=("Сервер $server16 ${opts[1]}" "Сервер $server18 ${opts[2]}" "Выбрать все" "Очистить выбор" "Отменить" "Выбрал")
 select opt in "${options[@]}"
    do 
    case $opt in
        "Сервер $server16 ${opts[1]}")
             ip_1=$server186
             break
         ;;
         "Сервер $server18 ${opts[2]}")
             ip_2=$server188
             break
         ;;
         "Выбрать все")
             ip_1=$server16 ip_2=$server18
             break
         ;; 
         "Очистить выбор")
             ip_1='' ip_2=''
             break 
         ;;
         "Отменить")
             ip_1='' ip_2=''
             exit
         ;; 
         "Выбрал")
             break 2
         ;;
         *) printf 'Твой выбор не правильный'
        ;;
     esac
     done
     done
}
start_v () 
{
     echo
     echo 'Старт'
     echo
     pssh -H "$ip_1 $ip_2" -i -l adm -t 20 "/etc/init.d/daemon.sh start"
     echo
}
stop_v () 
{
     echo
     echo "Остановка"
     echo
     pssh -H "$ip_1 $ip_2" -i -l adm -t 20 "/etc/init.d/daemon.sh stop"
     echo 
}
obnova ()
{
     echo 
     echo "Обновление"
     echo 
     pssh -H "$ip_1 $ip_2" -l adm -t 60 "mv /opt/projects /opt/projects_$xdate; unzip -d /opt/ /opt/projects.zip; chown -R adm:adm /opt/projects"
     echo 
}
download () 
{
     echo
     echo "Загрузка новой версии с ftp"
     echo 
     pssh -H "$ip_1 $ip_2" -l root -t 0 "wget -t 25 ftp://10.10.10.10/projects.zip -O /opt/projects.zip"
     echo 
}
export -f download
### Цвет
colour ()
{
     case $1 in
         green_black)
         echo -e '\E[32;40m'
         ;;
         yellow_black)
         echo -e '\E[33;40m'
         ;;
         blue_black)
         echo -e '\E[34;40m'
         ;;
         red_black)
         echo -e '\E[31;40m'
         ;;
         white_blue)
         echo -e '\E[37;44m'
         ;;
         blue_black)
         echo -e '\E[44;40m'
         ;;
         white_black)
         echo -e '\E[37;40m'
         ;;
     esac
}
export -f colour
### Body script 
while :
do 
clear
 export freespaceH=`df -h | grep -w '/' | awk '{print $3}'` 
 export MemTOTAL=`free -m | grep -w 'Mem' | awk '{print $2}'`
 export MemUSED=`free -m | grep -w 'Mem' | awk '{print $3}'`
 export MemFREE=`free -m | grep -w 'Mem' | awk '{print $4}'`
 export hostNM=`hostname`
 echo """
Меню утилиты обновления

Выберите номер:
1) - Остановка
2) - Запуск
3) - Обновление
4) - Скачать с ftp обновление
Q) - Выход из программы """
 read -n 1 anss
 case $anss in
    1)
     echo
     vibor_ip
     echo
     stop_v
     echo
     echo "Для продолжения работы нажмите Enter.." 
     read qa
     ;;
     2)
     echo
     vibor_ip
     echo
     start_v
     echo 
     echo "Для продолжения работы нажмите Enter.."
     read qa
     ;;
     3)
     clear
     echo
     echo "`colour red_black`Для обновления серверов с ftp необходимо скачать обновление.`colour white_black`"
     echo 
     echo "Проверяем дату изменения rvec.zip" 
     ls -lc /opt/projects.zip | awk '{print $6" "$7" "$8" "$9}'
     echo
     echo "Обновление скопированно?"
     echo
     echo "Да - `colour green_black`Y`colour white_black`"
     echo "Нет, но хочу скачать и начать обновление - `colour     yellow_black`L`colour white_black`" 
     echo "Нет - `colour red_black`N`colour white_black`"
     read -n 1 item
     case "$item" in
         y|Y)
         echo
         vibor_ip
         echo
         stop_v
         obnova
         start_v
         echo
         echo "Обновление завершено"
         ;;
         l|L) 
         echo
         vibor_ip
         echo
         download
         stop_v
         obnova
         start_v
         echo
         echo "Обновление завершено"
         ;;
         n|N) 
         echo "Скачайте с ftp обновление и повторите"
         ;;
         *) 
         echo "Ввели неверно, повторите."
         ;;
     esac
     echo
     echo "Для продолжения работы нажмите Enter.."
     read qa
     ;;
     4)
     echo
     vibor_ip
     echo
     download
     echo 
     echo "Для продолжения работы нажмите Enter.."
     read qa
     ;;
     q|Q)
     exit 0
     ;;
 esac
done
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s