Как создать собственный сценарий резервного копирования? [закрыто]

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

#!/bin/bash
tar -zxvf homefiles.tar.gz /home/
0
задан 27 February 2018 в 05:07

1 ответ

Это не ясно: Какие полномочия Вы изменили? Но я проигнорирую это сообщение :)

Обычно у пользователей системы нет полномочий записи вне их собственного корневого каталога, который по умолчанию является /home/<user>. Также Усера не может считать большинство файлов пользователя-B. Таким образом согласно пути в Вашем вопросе, для резервного копирования всех файлов и каталогов, расположенных в /home, необходимо выполнить команду с полномочиями корня, при помощи sudo.

Кроме того, Вы используете неправильную опцию - x вместо этого c - использовать tar --help:

tar -cf archive.tar foo bar  # Create archive.tar from files foo and bar.
tar -xf archive.tar          # Extract all files from archive.tar.

Таким образом, правильная команда должна быть одним из них:

sudo tar -zcvf /home/homefiles.tar.gz /home/ --exclude=/home/homefiles.tar.gz # the backup will be created in the directory `/home`
tar -zcvf /home/<user>/homefiles.tar.gz /home/<user> --exclude=/home/<user>/homefiles.tar.gz

Вот расширенный пример для Вас:

Как создать пользовательский резервный сценарий

Давайте примем наряду с /home каталог там является также Apache и серверами MySQL, и мы хотим сделать больше полного резервного копирования системы.

1. Создайте названный файл mybackup; сделайте это исполняемым файлом; найдите его в /usr/local/bin быть доступным как широкая система команд оболочки. Создайте каталог, где файлы резервных копий будут храниться:

sudo touch /usr/local/bin/mybackup && sudo chmod +x /usr/local/bin/mybackup
sudo mkdir /var/backup

Вставьте следующий сценарий как содержание файла /usr/local/bin/mybackup и сохраните его:

#!/bin/bash

## Get the current date as variable.
TODAY="$(date +%Y-%m-%d)"

## Delete backup files older than 2 weeks before create the new one.
find /var/backup/ -mtime +14 -type f -delete

## MySQL Section. The first line is if you are using `mysqldump`,
## the next line is for `automysqlbackup`. I'm using both.
mysqldump -u'root' -p'<my-pwd>' --all-databases | gzip > /var/backup/mysql-all-db.sql.gz
automysqlbackup

## Tar Section. Create a backup file, with the current date in its name.
## Add -h to convert the symbolic links into a regular files.
## Backup some system files, also the entire `/home` directory, etc.
## --exclude some directories, for example the the browser's cache, `.bash_history`, etc.
tar zcvf "/var/backup/my-backup-$TODAY.tgz" \
/etc/hosts /etc/sudoers* /var/spool/cron/crontabs /etc/cron* \
/etc/apache2 /etc/letsencrypt /etc/php/7.0/apache2/php.ini \
/etc/phpmyadmin/apache.conf /etc/mysql/debian.cnf \
/etc/ssh/sshd_config* /etc/pam.d/sshd \
/usr/local/bin \
/var/backup/mysql-all-db.sql.gz /var/lib/automysqlbackup/latest/*.sql.gz \
/root \
/home \
/var/www \
--exclude=/home/<some-user>/.composer --exclude=/home/<some-user>/.npm

## MySQL Section - remove the DB backup files, if you want:
#rm /var/lib/automysqlbackup/latest/*.sql.gz
rm /var/backup/mysql-all-db.sql.gz
  • Если бы это - VPS, возможно, Вы хотели бы получить доступ к своему файлу резервной копии от Интернета до веб-браузера. В этом случае мы могли зашифровать файл для дополнительной безопасности. Если Вы - поклонник 7zip, добавляет некоторая команда как рядом с нижней частью сценария:

    rm /var/www/html/the-location/*
    7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz"
    
  • Если это будет рабочим столом, то возможно, Вы захотите исключить все Downloads каталог для каждого пользователя. Вы могли исключить также все файлы, больше, чем или/и, исключая расширения определенного файла.

  • Обратите внимание, что все команды, используемые выше, расположены в /bin или /usr/bin это перечислено в значение по умолчанию $PATH из Крона. Если Вы, намереваются использовать задание Крона для автоматизации задачи, и у Вас есть команды (сценарии), которые расположены за пределами этих каталогов, необходимо использовать /the/full/path/to/the/script :)

2. Для упаковки в ящики резервного копирования вручную теперь можно использовать эту команду:

sudo mybackup

3. Для автоматизации задачи, можно добавить новую запись в корне crontab командой sudo crontab -e. Например, для выполнения сценария каждую ночь в 1:15 определение задания Крона должно быть:

15 1 * * * /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1
  • это создаст также файл журнала /var/log/mybackup-cron.log это будет содержать и сообщения об ошибках 2>&1 если существует кто-либо. Считайте журнал периодически, чтобы быть sur, все хорошо работает.

С другой стороны, я предпочел бы создавать сценарий в /etc/cron.daily/:

sudo touch /etc/cron.daily/mybackup && sudo chmod +x /etc/cron.daily/mybackup

Содержание файла должно быть чем-то как этим:

#!/bin/sh
test -x /usr/local/bin/mybackup || exit 0
echo -e "*** Log Begin $(date +%Y-%m-%d) ***\n" >> /var/log/mybackup-cron.log
/usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1
echo -e "*** Log End $(date +%Y-%m-%d) *** \n" >> /var/log/mybackup-cron.log

Обновление:

Вышеупомянутый сценарий мог быть найден в репозитории GitHub, названном Простыми Решениями для резервного копирования.

8
ответ дан 30 October 2019 в 09:13

Другие вопросы по тегам:

Похожие вопросы: