cron script para backups agendados

2

Estou procurando um script cron que possa fazer alguns backups. Sou principalmente um desenvolvedor web, então estou meio que com coisas bash / cron newbish.

Eu quero cron irá copiar todos os arquivos ou diretórios em um "filelist.txt" em uma unidade de armazenamento de rede montada uma vez por dia. o ideal é que funcione em todas as 3 das minhas caixas, 1 fedora 1 ubuntu e 1 sunos (apenas com nomes de arquivos diferentes em cada)

a parte complicada é: eu só quero salvar backups dos últimos 7 dias e excluir qualquer um mais antigo que isso

    
por Will 07.02.2010 / 06:04

4 respostas

2

Tenho certeza de que algumas pessoas podem melhorar bastante isso, mas isso pode ajudar você.

Os comandos necessários provavelmente são encontrados para verificação e determinação da lista de arquivos para backup e, em seguida, tar, cpio ou zip para arquivamento, dependendo de suas preferências.

Modificarei sua especificação um pouco para varrer os diretórios, mas não os arquivos individuais.

Vamos supor que o /etc/backupdirlist.txt contenha uma lista de diretórios para verificar e / media / backup é o ponto de montagem da mídia de backup (já montado) e / media / backup / backups é um diretório já existente no qual você deseja colocar os backups e filelists.

O requisito de sete dias não é difícil de cumprir se você usar o dia da semana como o nome do arquivo de destino no processo de backup e escrever sobre os antigos.

Você precisa de algo assim

(nota: não testado, pode ter erros, desculpas se fizer algo estúpido, é aplicável a Licença GNU LGPL e o termo de responsabilidade padrão)

Eu sugiro passar por cima deste comando de cada vez e examinar as variáveis com echo $ VAR ou os arquivos com menos para ver o que ele faz. Leia também as man pages para find e cpio.

#!/bin/bash
DIRLIST=/etc/backupdirlist.txt
DAYOFWEEK='date +%a'
FILELISTDEST=/media/backup/backups/$DAYOFWEEK.filelist
BACKUPDEST=/media/backup/backups/$DAYOFWEEK.backup.tgz
TIMELIMIT=-1  # says save everything modified less than or equal to one day ago
echo >$FILELISTDEST   # to erase last weeks list
for DIR in 'cat $DIRLIST' 
 do find $DIR -mtime $TIMELIMIT >>$FILELISTDEST  # >> appends the lists
done
cat $FILELISTDEST | cpio --create --format=ustar | gzip -9 -c >$BACKUPDEST

Eu não expliquei como colocar este script no cron, vou deixar isso para você ou outro participante. Certifique-se de que ele funciona e faça o que você deseja como um script, antes de automatizá-lo.

Nas diferentes caixas unix, pode haver variações nas versões do fabricante dos utilitários padrão, como find ou cpio. A melhor maneira de contornar isso é instalar as versões GNU em todas as plataformas. O Linux já tem as versões GNU.

Espero que isso ajude!

    
por 07.02.2010 / 07:10
2

Recomendamos que você considere rsync com sua opção --files-from=/path/to/filelist .

Nesse meio tempo, aqui estão algumas melhorias para o script ~ drpaulbrewer's :

#!/bin/bash
dirlist=/etc/backupdirlist.txt
dayofweek=$(date +%a)
backupdest=/media/backup/backups/${dayofweek}.backup.tgz
while read -r dir 
do
    find "$dir" -print0
done < "$dirlist" |
    cpio --null --create --format=ustar | gzip -9 -c > "$backupdest"

Isso elimina a necessidade de um arquivo temporário e é capaz de manipular nomes de arquivos com espaços.

Eu mudei os nomes das variáveis para minúsculas. Mesmo que estes não entrem em conflito com aqueles que o próprio Bash usa, eu prefiro não usar nomes de variáveis all-caps para evitar colisões de nomes. Você pode usar qualquer um dos vários formatos de casos mistos, se preferir. Você deve sempre citar nomes de variáveis que contenham nomes de arquivos ou diretórios.

Eu eliminei o limite de tempo, pois se algo não for alterado, nunca será feito backup ou se for alterado, em seguida, salvo em backup por sete dias, o backup será sobrescrito.

Além disso, lembre-se da primeira regra de backups: não é feito backup se você não testou com êxito uma restauração.

Adicione uma linha no seu crontab (usando crontab -e ) similar a esta:

0  0  *  *  *  /path/to/backupscript > /dev/null 2>&1
    
por 07.02.2010 / 08:41
1

Eu achei essa resposta útil, mas não tenho reputação suficiente para votar positivamente. Eu usei uma combinação das outras respostas postadas por Dennis Williamson e user33903 ( link e link ) e veio com o script abaixo para usar em um dos meus servidores:

Observação: não incluí os detalhes do grupo de usuários de backup e minha string de data na variável backupdestfile é "+% Y-% m-% d".

#!/bin/bash
filelist=/etc/backup/filelist.txt
dirlist=/etc/backup/dirlist.txt
backupdestdir=/backup
backupdestfile=$backupdestdir/backup-$(date "+%Y-%m-%d").tar.gz
tmpfile=$(mktemp)
packagedump=/etc/backup/installed-packages.txt
servicedump=/etc/backup/service-config.txt
backupusergroup=not.telling

# generate list of installed packages
dpkg-query -W > $packagedump

# dump current service configuration
sysv-rc-conf --list > $servicedump

# generate list of files to backup, kept in $tmpfile
echo $tmpfile >> $tmpfile
echo $packagedump >> $tmpfile
echo $servicedump >> $tmpfile
cat $filelist >> $tmpfile
cat $dirlist | while read dir
do
    find "$dir" >> $tmpfile
done

# generate the backup archive
cat $tmpfile | cpio --create --format=ustar | gzip -9 -c > $backupdestfile

# cleanup
rm $tmpfile
chown $backupusergroup -R $backupdestdir
chmod og-rwx -R $backupdestdir
    
por 23.02.2013 / 02:22
0

É muito bom salvar backups no Amazon S3.

Para backups, eu recomendo usar duplicidade e DT-S3-Backup

O DT-S3-Backup foi projetado para automatizar e simplificar o processo de backup remoto usando a duplicidade e o Amazon S3. Depois que o script é configurado, você pode facilmente fazer backup, restaurar, verificar e limpar sem precisar lembrar de várias opções de comando diferentes.

    
por 07.02.2010 / 10:44