Crie um sistema automático de backup no Ubuntu com bash e crontab
Tags: bash, iniciante
Published: 2022-12-25 23:17:55


Existe um monte de coisas legais que podem ser feitas com scripts! Uma coisa que sempre quis fazer é criar um sistema de backup que roda automaticamente em um certo ponto do dia. Agora que descobri como fazer, vou lhes mostar como criar um script com os comandos`rsync` e `crontab`.

## Passo 0: Tudo começa com um BANG

Crie um script chamado `fazBackup.sh`, contendo algo assim:

```bash
#!/bin/bash

echo Inicializando script de backup.
```

O comentário `#!/bin/bash` é uma diretiva que anuncia que interpretador deve ser usado. Neste caso, o interpretador é o `bash`, mas poderia ser `python` ou `node`. Tal diretiva é chamada de `shebang`.

Precisamos de um script _executável_, o que significa a necessidade de permissão para execução. Para modificar tal política, usamos o comando `chmod`. Este comando tem duas formas de adotar novas políticas: números e letras. Aqui será usado a forma de letras e todos os usuários serão capazes de executar o script. (Para saber mais sobre o `chmod`, [aqui](https://www.howtogeek.com/437958/how-to-use-the-chmod-command-on-linux/)) está a documentação em inglês.)

No terminal, escreva:

```bash
chmod a+x makebackup.sh
# a means all users
# + means adding a permission (a minus (-) would be removing it).
# x means permission to execute
```

## Passo 1: De onde veio, pra onde foi

Nós usaremos o `rsync` para copiar os items, porém você poderia usar outras ferramentas, como o commando `cp`. Para aprender mais sobre o `rsync`, [leia esse tutorial](https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories) (em inglês).

Dentro do `fazBackup.sh`, escreva o seguinte:

```bash
#!/bin/bash
echo Inicializando script de backup.

rsync [Fontes] /caminho/para/[Destino]/
# Fontes são todos os arquivos e pastas a serem guardados
# Destino é a pasta onde o backup será guardado

echo Backup finalizado. Teminando script.
```

Lembrete! A pasta de [Destino] não precisa existir previamente, pois `rsync` cria a pasta no diretório. Tudo o que precisa fazer é colocar o nome desejado, seguindo por uma barra ('/').

## Step 2: Tenho um trabalho pra você

Antes de configurar o cronjob, você precisa definir a agenda. Quando que o backup deve ser feito? Use a ferramenta [Crontab Guru](https://crontab.guru/#50_9_*_*_FRI) para decidir quando você quer o trabalho feito — diariamente, semanalmente, mensalment, etc.

Depois, você configura o cronjob, que é bem fácil! Digite `crontab -e` no terminal, e ele abrirá um crontab com umas informações bacanas — vale a pena dar uma olhada. Dentro desse arquivo, vá ao final, cole a data que você criou no [Crontab Guru](https://crontab.guru/#50_9_*_*_FRI), e escreva todo o caminho absoluto para o script executável. Algo assim:

```bash
# Crontab file
00 10 * * * /caminho/para/fazBackup.sh
```
## Passo 3: E fim

E pronto! Teu script de backup está automatizado.

### Uns avisos e considerações

O serviço `cron` leva um ou dois minutos para atualizar, então se você quiser testar imediatamente, mantenha o timing em mente: coloque a execução do script uns 3 minutos depois de salvar o crontab.

Outra coisa a saber: você poderia agendar o comando `tar`, em vez de criar um script personalizado. Ficaria algo como:

```bash
# Crontab
# at 10:30 am, everyday, do
30 10 * * * tar cvzf /caminho/para/arquivo_de_saida.tar.gz /caminho/para/diretorio_de_entrada/
```

## Conclusion

Espero que este artigo tenha ajudado! O serviço `cron` é bastante poderoso, assim como é o scripting em `bash`. Você pode criar todos tipos de tarefas agendadas e tornar sua máquina linux num mordomo pessoal! Se tiver ideas do que mais pode ser feito com `cron` ou sugestões de melhoria para este artigo, comente abaixo!