ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Bash. Автоматизация с помощью Bash

Bash. Автоматизация с помощью Bash

Теперь вы можете использовать все навыки bash, которые вы изучили в этой серии предыдущих статей по bash, для создания очень полезных сценариев bash, которые помогут вам автоматизировать скучные повторяющиеся административные задачи.

Автоматизация действительно должна быть вашей конечной целью всякий раз, когда вы пишете сценарий bash.

В этой статье мы покажем вам несколько сценариев автоматизации, которые впоследствии можно будет расширить, чтобы автоматизировать любую задачу. Эти скрипты будут использовать массивы bash, if-else, циклы и другие концепции, которые вы изучили в этой серии.

 

Автоматизация управления пользователями с помощью сценария bash

Создание пользователя на нескольких серверах может быть чем-то, что вы, как системный администратор, будете делать ежедневно. Это утомительная задача, поэтому давайте создадим сценарий bash, который ее автоматизирует.

Сначала создайте текстовый файл, включающий все имена хостов или IP-адреса серверов, на которых вы хотите добавить пользователя.

Например, здесь я создал файл servers.txt, который включает пять разных серверов:

destroyer@andreyex:~$ cat servers.txt
server1
server2
server3
server4
server5

 

Имейте в виду, что vsмы использовали имена хостов серверов, поскольку мы уже включил IP-адреса в свой файл /etc/hosts. Вы также можете использовать здесь конфигурационный файл SSH.

Теперь взгляните на следующий сценарий bash adduser.sh :

#!/bin/bash

servers=$(cat servers.txt)

echo -n "Введите имя: "
read name
echo -n "Введите пользователя id: "
read uid

for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "Пользователь $name добавлен $i"
else
echo "Ошибка $i"
fi
done

 

Сценарий adduser.sh сначала попросит вас ввести имя пользователя и идентификатор пользователя, которого вы хотите добавить; затем он выполнит цикл и подключится ко всем серверам в файле servers.txt через SSH и добавит запрошенного пользователя.

Запустим скрипт и посмотрим, как он работает.

Скрипт успешно запустился, и пользовательский доступ был добавлен на все пять серверов. Здесь есть несколько важных моментов, которые вам необходимо понять:

Представьте, что вам нужно добавить пользователя на более 100 различных серверов Linux! Adduser.sh сценарий определенно может сэкономить вам бесчисленное количество часов работы.

 

Автоматизация резервного копирования с помощью сценария bash

Резервное копирование – это то, что мы все делаем на регулярной основе, так почему бы не автоматизировать его? Взгляните на следующий сценарий backup.sh :

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Запуск резервного копирования: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i резервное копирование прошло успешно."
else
echo "$i ошибка резервного копирования."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i передача прошла успешно."
else
echo "$i передача не удалось."
fi
done

sudo rm /tmp/*.gzecho "Резервное копирование сделано."

 

Итак, вы сначала создали массив с именем backup_dirs, в котором хранятся все имена каталогов, которые мы хотим сохранить . Затем вы создали три другие переменные:

Далее, для всех каталогов в backup_dirs массива, создать GZIP сжатый деготь архив в /tmp, а затем использовать цементные команду для отправки/копирования резервной копии на сервере назначения. Наконец, удалите все архивы gzip из /tmp.

Вот пример выполнения сценария backup.sh :

destroyer@andreyex:~$ ./backup.sh
Запуск резервного копирования: /etc /home /boot
/etc резервное копирование прошло успешно.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s   00:02
/etc передача прошла успешно.
/home резервное копирование прошло успешно.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s   00:04
/home передача прошла успешно.
/boot резервное копирование прошло успешно.
boot-Aug-30-20.tar.gz 100%  105MB 520.2KB/s   03:26
/boot передача прошла успешно.
Резервное копирование сделано.

 

Вы можете запускать резервное копирование каждый день в полночь. В этом случае вы можете запланировать запуск скрипта как задание cron :

destroyer@andreyex:~$ crontab -e
0	0	*	*	* /home/destroyer/scripts/backup.sh

 

Мониторинг доступного дискового пространства

Файловым системам суждено исчерпать пространство, единственное, что вы можете сделать, это действовать быстро, прежде чем ваша система выйдет из строя! Вы можете использовать команду df, чтобы увидеть оставшееся пространство в любой файловой системе :

destroyer@andreyex:~$ df -h / /apps /database
Filesystem Size  Used Avail Use% Mounted on
/dev/sda5 20G  7.9G   11G  44% /
/dev/mapper/vg1-applv 4.9G  2.4G  2.3G  52% /apps
/dev/mapper/vg1-dblv 4.9G  4.5G  180M  97% /database

 

В нашей файловой системе/базе данных почти не осталось места, так как в настоящее время она используется на 97%. Мы можем отобразить только использование, если использую команду awk для отображения только пятого поля.

Теперь взгляните на следующий сценарий bash disk_space.sh :

#!/bin/bash
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Заканчивается свободное место на $i, Usage is: $usage%"
echo "Отправка оповещения о дисковом пространстве по электронной почте."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done

 

Сначала вы создали массивы файловых систем, которые содержат все файловые системы, которые вы хотите отслеживать. Затем для каждой файловой системы вы берете процент использования и проверяете, больше ли он или равен 90. Если использование превышает 90%, он отправляет электронное письмо с предупреждением о том, что в файловой системе не хватает места.

Обратите внимание, что вам нужно заменить your_email в скрипте своим реальным адресом электронной почты.

Мы запустили сценарий:

destroyer@andreyex:~$ ./disk_space.sh
Отправка оповещения о дисковом пространстве по электронной почте.

 

Вы можете запустить сценарий disk_space.sh примерно через шесть часов. В этом случае вы также можете запланировать запуск скрипта как задание cron:

destroyer@andreyex:~$ crontab -e
0	*/6 *		*		* /home/destroyer/scripts/disk_space.sh

 

Все! На этом мы подошли к концу нашей серии руководств для начинающих по bash. Надеюсь, вам понравилось изучать скрипты на bash. Имея в своем арсенале навыков bash-скрипты, вы можете автоматизировать любую скучную утомительную задачу в Linux!

Exit mobile version