Como eu crio um script de backup personalizado? [fechadas]

0

Eu vou fazer um arquivo de script de shell que comprime todos os arquivos do diretório home, mas o tar não está rodando depois que eu mudei as permissões.

#!/bin/bash
tar -zxvf homefiles.tar.gz /home/
    
por pa4080 26.02.2018 / 18:10

1 resposta

5

Não está claro: quais permissões você alterou? Mas vou ignorar esta mensagem:)

Normalmente, os usuários do sistema não têm permissões de gravação fora de seu próprio diretório inicial, que por padrão é /home/<user> . Também o usuário-A não pode ler a maioria dos arquivos do usuário-B. Então, de acordo com o caminho em sua pergunta, para fazer backup de todos os arquivos e diretórios localizados em /home , você deve executar o comando com os privilégios do root, usando sudo .

Além disso, você está usando a opção errada - x em vez c - use 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.

Então o comando certo deve ser um desses:

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

Aqui está um exemplo estendido para você:

Como criar um script de backup personalizado

Vamos supor que junto com o diretório /home também existem servidores Apache e MySQL e queremos fazer um backup mais completo do sistema.

1. Crie um arquivo chamado mybackup ; torne-o executável; localize-o em /usr/local/bin para ficar acessível como o sistema de comandos shell. Crie um diretório onde os arquivos de backup serão armazenados:

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

Cole o seguinte script como conteúdo do arquivo /usr/local/bin/mybackup e salve-o:

#!/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
  • Se este for um VPS, talvez você queira acessar seu arquivo de backup da Internet através do navegador da web. Nesse caso, poderíamos criptografar o arquivo para segurança adicional. Se você é fã do 7zip adicione algum comando como o próximo ao final do script:

    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"
    
  • Se esta for uma área de trabalho, talvez você queira excluir todo o diretório Downloads de cada usuário. Você pode excluir também todos os arquivos maiores que ou / e excluindo determinadas extensões do arquivo .

  • Observe que todos os comandos usados acima estão localizados em /bin ou /usr/bin , listados no padrão $PATH do Cron. Se você pretende usar o trabalho Cron para automatizar a tarefa e tiver comandos (scripts) localizados fora desses diretórios, use /the/full/path/to/the/script :)

2. Para criar um backup manualmente, agora você pode usar este comando:

sudo mybackup

3. Para automatizar a tarefa, você pode adicionar uma nova entrada ao crontab pelo comando sudo crontab -e . Por exemplo, para executar o script todas as noites às 1:15, a definição do trabalho Cron deve ser:

15 1 * * * /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1
  • isso criará também o arquivo de log /var/log/mybackup-cron.log que conterá e as mensagens de erro 2>&1 , se houver alguma. Leia o log periodicamente para saber se tudo funciona bem.

Como alternativa, prefiro criar um script em /etc/cron.daily/ :

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

O conteúdo do arquivo deve ser algo assim:

#!/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

Atualização:

O script acima pode ser encontrado no repositório do GitHub, chamado Simple Backup Solutions .

    
por pa4080 26.02.2018 / 22:55