Автоматизация действительно должна быть вашей конечной целью всякий раз, когда вы пишете сценарий bash.
В этой статье мы покажем вам несколько сценариев автоматизации, которые впоследствии можно будет расширить, чтобы автоматизировать любую задачу. Эти скрипты будут использовать массивы bash, if-else, циклы и другие концепции, которые вы изучили в этой серии.
Создание пользователя на нескольких серверах может быть чем-то, что вы, как системный администратор, будете делать ежедневно. Это утомительная задача, поэтому давайте создадим сценарий 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 сценарий определенно может сэкономить вам бесчисленное количество часов работы.
Резервное копирование — это то, что мы все делаем на регулярной основе, так почему бы не автоматизировать его? Взгляните на следующий сценарий 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!
Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!
Спасибо! Ваша заявка принята
Спасибо! Ваша заявка принята