у меня есть очень ограниченный опыт написания сценариев оболочки и хотел бы внедрить какой-нибудь сценарий, который еженедельно поддерживает резервное копирование моего блога (Wordpress).
Вот что у меня есть
#!/bin/bash
# Determine current date
setenv CURDATE date +%Y%m%d
# Backup DB & email it to me
mysqldump dbname -u user -ppassword | gzip | uuencode ${CURDATE}dbname.sql.gz | mail -s "backup for dbname ${CURDATE}" my@email.com
cd /home/myhome
# Zip blog
tar cf - blog.mysite.me | gzip - > ~/backups/${CURDATE}blog.mysite.me.tar.gz
И здесь я немного застрял ... Я думал о том, чтобы отправить себе по электронной почте каталог блога, но что произойдет, когда он станет больше, чем 10 МБ или около того? как мне написать сценарий, чтобы разделить это и отправить мне по электронной почте куски?
Еще одно предложение, которое, как мне кажется, лучше, - это отправить резервные копии по FTP на другой принадлежащий мне VPS. Но ради экономии я хотел бы сохранить только 10 последних резервных копий. Как мне реализовать часть скрипта скрипта, которая:
Любая помощь / совет или указатели по решению этой проблемы были бы очень признательны :)
Вместо архивирования и ftping используйте rsync по сети. Если вы создадите новый каталог для каждой даты и используете параметр --link-dest, чтобы связать его с предыдущим каталогом, он будет хранить только измененные файлы, а файлы, которые не изменяются, будут жесткой ссылкой на Предыдущая.
Я разместил код на Какое решение для резервного копирования вы используете для серверов Linux
Во-первых, чтобы установить переменную из команды, используйте
CURDATE=$(date +%Y%m%d)
вместо того
setenv CURDATE date +%Y%m%d
Если вы хотите оставить резервную копию всего на 10 дней, вы можете сделать это, удалив резервную копию, созданную 10 дней назад. Использовать date
относительные команды, чтобы найти его и сохранить в другую переменную:
PAST_DATE=$(date +"%m-%d-%Y" --date="10 days ago")
Во-вторых, вы можете использовать lftp
для выполнения команд ftp в одной строке, например:
lftp -u user,pass server -e "mrm *${PAST_DATE}.sql.gz; exit;
Если вы используете дату в именах файлов и каждый день удаляете файлы, которым 10 дней, вы можете делать именно то, что думаете. Ты можешь использовать lftp
чтобы файлы тоже помещались, он работает как обычный клиент, только работает на одной строке.