Bash скрипт для резервного копирования сайта в облако. Отправки логов веб-сервера на почту.
Для чего:
- Перезапуск linux в заданное время.
- Отправка логов на почтовый ящик из командной строки.
- Бекап сайта и Б.Д.
Планировщик заданий Cron:
Устанавливаем cron:
# apt-get install cron
Просмотреть записи от текущего пользователя:
# crontab -l
Правка задач:
# crontab -e
- при первом запуске, необходимо выбрать редактор (2 для nano)
От другого пользователя:
# crontab -u user -l
Допустимые значения:
Минуты (0-59) | Часы (0-23) | День месяца (1-31) | Месяц (1-12) | День недели (0-7) | Команда
День недели (0-Вс, 1-Пн, 2-Вт, 3-Ср, 4-Чт, 5-Пт, 6-Сб, 7-Вс)
Или так:
* * * * * Выполняемая команда;
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)
Примеры:
- Перезапуск системы
5 0 * * 0 /sbin/reboot
- Запуск sh скрипта (не забываем про chmod +x)
7 0 * * 0 /home/script.sh
Дополнительные переменные cron
Переменная Описание Эквивалент
@reboot Запуск при загрузке
@yearly Раз в год 0 0 1 1 *
@annually Тоже что и @yearly
@monthly Раз в месяц 0 0 1 * *
@weekly Раз в неделю 0 0 * * 0
@daily Раз в день 0 0 * * *
@midnight В полночь (00:00)
@hourly Каждый час 0 * * * *
Отправка почты из командной строки:
Устанавливаем пакет mailutils:
# apt-get install mailutils
Отправляем обычное письмо:
# mail -s "Nginx Log's" user@mail.ru
- далее вводим текст письма и после, в новой строке нажимаем crtl+d
Отправка письма одной строкой нескольким получателям:
# echo "Body mail" | mail -s "Nginx Log's" user1@mail.ru,user2@mail.ru
С вложением:
У каждого файла, должен быть свой ключ "-a".
# echo "Body mail" | mail -s "Nginx Log's" -a /var/log/nginx/error.log user@mail.ru
Отправляем письмо от указанного отправителя, а тело письма из файла:
# mail -s "Nginx Log's" -r from@mail.ru user@mail.ru < /var/log/nginx/error.log
Вывод программы:
# psad -A | mail -s "Psad Stat's" user@mail.ru
Mutt
Устанавливаем Mutt:
# apt-get install mutt
Отправка письма с вложением:
- От текущего пользовотеля
echo "Sent to the CronTab!" | mutt -s "Nginx Log's" -a /var/log/nginx/error.log -- user@mail.ru
- От заданного
echo "Sent to the CronTab!" | sudo -u user mutt -s "Nginx Log's" -a /var/log/nginx/error.log -- user@mail.ru
Бекап сайта по протоколу WebDAV:
Подготавливаемся:
# mkdir /home/backup
# touch /home/backup/backup.sh
# chmod 0700 /home/backup
# chmod 0700 /home/backup/backup.sh
В backup.sh добавляем:
# nano /home/backup/backup.sh
Просмотреть листинг:
#!/bin/bash
#
#Логи и Время работы скрипта;
LOGFILE="/home/backup/logs.txt"
TIME="$(date +%d-%m-%Y\ %H:%M:%S)"
#
#Переменные Базы данных;
DBHOST="localhost" #Адрес MySQL сервера;
DBUSER="db_user" #Имя пользователя базы данных;
DBPASS="db_pass" #Пароль пользователя базы данных;
DBNAME="db_name" #Имя базы данных;
DBARC=$DBNAME.sql.gz #Имя архива базы данных;
#
#Переменные WEBDAV;
WEBDAVURL="https://webdav.yandex.ru/BackUp/unix.center/" #Адрес Яндекс.Диск. Папка должна существовать!;
WEBDAVUSER="webdav_user" #Имя пользователя от Яндекс.Диска (Яндекс.Почты);
WEBDAVPASS="webdav_pass" #Пароль от Яндекс.Диска;
#
#Переменные сайта;
SCRIPTDIR="/home/backup/" #Абсолютный путь откуда запускается скрипт и где храняться архивы;
SCRDIR="/home/unix.center/" #Абсолютный путь к сайту от корня диска;
SCREXCLUDE="" #Что не попадет в архив;
SCRARC="unix.center.tar.gz" #Имя архива файлов сайта;
#
#Переменные Резерных копий;
ARCNAME="unix.center"=$(date '+%F(%H:%M)')".tar" #Имя архивной копии сайта;
ARCMAX="6" #Количество файлов в локальном хранилище;
#
#Переходим в корневую директорию вебсервера;
cd $SCRDIR
#
#Создаем файловый архив со сжатием, учитываем исключения;
tar cfz $SCRIPTDIR$SCRARC --exclude=$SCREXCLUDE *
echo "[+] Created файловый архив с сайтом [Compressed]!" >> $LOGFILE
#
#Возвращаемся в папку со скриптом, где лежат все архивы;
cd $SCRIPTDIR
#
#Архивируем базу данных со сжатием;
mysqldump -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME | gzip > $DBARC
echo "[+] Created архив БД [Compressed]!" >> $LOGFILE
#
#Объединяем файловый архив и дамп базы данных, теперь уже без сжатия;
tar cf $SCRIPTDIR$ARCNAME $SCRARC $DBARC
echo "[+] Join Сайт + БД [Uncompressed]!" >> $LOGFILE
#
#Отправляем результат в Яндекс.Диск;
echo "[+] Sending to Yandex.Disk WebDAV!" >> $LOGFILE
curl --user $WEBDAVUSER:$WEBDAVPASS -T $ARCNAME $WEBDAVURL --progress-bar -o /dev/null
#
#Убираем промежуточные архивы;
rm *.gz
echo "[+] Clear промежуточные архивы!" >> $LOGFILE
#
#Удаляем старые копии сайта, оставляем несколько свежих копий;
ls -t *.tar | tail -n+$ARCMAX | xargs rm -f
echo "[+] Delete old Archives!" >> $LOGFILE
echo "[+] - $TIME - BuckUp Success!" >> $LOGFILE
#
#Отправляем логи на почту, а потом чистим их;
mail -s "BuckUp - unix.center" mail_user@yandex.ru < $LOGFILE
cp /dev/null $LOGFILE
Осталось добавить задание в планировщик cron:
# crontab -e
Полезные ссылки:
rus-linux.net -| 1 | 2 | / 15 примеров — | 1 | / ВикипедиЯ |