Теперь вы можете использовать все навыки 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 и добавит запрошенного пользователя.
Запустим скрипт и посмотрим, как он работает.
Скрипт успешно запустился, и пользовательский доступ был добавлен на все пять серверов. Здесь есть несколько важных моментов, которые вам необходимо понять:
- Вы можете использовать пустые парольные фразы ssh или запустить ssh-agent, чтобы не получать запрос на ввод ключа (или пароля) во время выполнения сценария.
- У вас должна быть действующая учетная запись с доступом суперпользователя (без требования пароля) на всех серверах.
Представьте, что вам нужно добавить пользователя на более 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, в котором хранятся все имена каталогов, которые мы хотим сохранить . Затем вы создали три другие переменные:
- dest_dir: чтобы указать каталог назначения резервного копирования.
- dest_server: для указания сервера назначения резервного копирования.
- backup_time: указать дату резервного копирования.
Далее, для всех каталогов в 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!