# Como Reiniciar Automaticamente um Droplet do Digital Ocean

## Introdução

Você pode ter diversos motivos diferentes para querer reiniciar automaticamente um droplet no Digital Ocean, se você estiver procurando por alguma opção no console, observará algo parecido com essa imagem:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707271333/c24d7cb9-3f96-4901-9569-424c303ecd95.png align="center")

Há apenas duas opções disponíveis:

* `Turn off`
    
* `Power Cycle`
    

Mas infelizmente nenhuma que nos ajude a reiniciar nosso droplet.

Podemos também por exemplo acessar o droplet através de `SSH` e executar o comando:

```bash
sudo shutdown -r now
```

<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">Porém essa ação ainda não é automática</div>
</div>

Então se você está procurando uma forma de reiniciar automaticamente seu Droplet no Digital Ocean, compartilho neste artigo o passo a passo de como consegui fazer isso.

---

## Resposta Curta

1- Acesse seu Droplet através do `SSH` com seu aplicativo de terminal de sua preferência

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710961428221/26d5222d-4937-411d-8d00-fa5047bdca4e.png align="center")

2- Copie e cole o comando:

```bash
# Create reboot script file
cat <<'EOF' | sudo tee -a ~/reboot-script.sh > /dev/null
#!/bin/bash

# Add timestamp to the log file before shutdown
echo "Reboot initiated at $(date)" >> ~/reboot-log.txt

# Shutdown the machine
sudo shutdown -r now
EOF

# Set reboot script file executable
chmod +x ~/reboot-script.sh && \

(crontab -l 2>/dev/null; \
echo "0 7 * * * ~/reboot-script.sh"; \
echo "0 19 * * * ~/reboot-script.sh") | crontab - && \

# Create log file
touch ~/reboot-log.txt && \

# Set logrotate to log file
cat <<'EOF' | sudo tee -a /etc/logrotate.conf > /dev/null
~/reboot-log.txt {
    daily
    rotate 15
    compress
    delaycompress
    missingok
    notifempty
}
EOF
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710961502970/339fe41a-7d40-4691-a93e-f993c388ce75.png align="center")

3- Edite o `cron` para os horários de sua preferência alterando esse trecho:

```bash
(crontab -l 2>/dev/null; \
echo "0 7 * * * ~/reboot-script.sh"; \
echo "0 19 * * * ~/reboot-script.sh") | crontab - && \
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710961819862/24f6de9f-debf-42ac-9c50-9f917d81c725.png align="center")

4- Pressione `Enter` para executar

<div data-node-type="callout">
<div data-node-type="callout-emoji">☑</div>
<div data-node-type="callout-text">Pronto! Seu Droplet agora já está configurado para reiniciar automaticamente!</div>
</div>

* Se você não editou o cron, ele irá reiniciar todos os dias as 07 e 19 horas UTC
    
* Se você editou o cron, ele irá reiniciar de acordo com sua preferência
    

Caso você queira entender um pouco mais sobre os detalhes do que foi feito, acompanhe nosso tutorial detalhado abaixo, senão achar necessário, você está pronto!

---

## Tutorial

1- Utilize seu terminal preferido e acesse seu Droplet através do `SSH`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707465548/ef9c6316-c1eb-466c-b413-cf8bad76ad8d.png align="center")

2- Crie um arquivo chamado `reboot-script.sh` com o comando:

```bash
touch reboot-script.sh
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707361032/e8884833-f58a-4905-8f08-020579e31552.png align="center")

3- Agora edite esse arquivo com o comando:

```bash
sudo nano reboot-script.sh
```

E adicione o seguinte conteúdo:

```bash
#!/bin/bash

# Add timestamp to the log file before shutdown
echo "Reboot initiated at $(date)" >> ~/reboot-log.txt

# Shutdown the machine
sudo shutdown -r now
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707542402/eb870927-ca03-4c0b-8445-e3564e98697a.png align="center")

4- Torne o arquivo executável com o comando:

```bash
chmod +x reboot-script.sh
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707405037/908df890-3126-4894-a7da-b3fba7cf9113.png align="center")

5- Edite o `crontab`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707337095/315af6a9-d69e-4990-9011-d006b09e4954.png align="center")

Por exemplo, para executar todos os dias às `07 horas UTC`, isso seria:

```bash
0 7 * * *
```

* **0**: é o minuto em que o cron será executado. Neste caso, o que significa que a tarefa será executada quando o relógio marcar exatamente 0 minutos.
    
* **7**: é a hora em que o cron será executado. Neste caso, o que significa que a tarefa será executada às 7 horas.
    
* **\***: o asterisco é um caractere curinga que representa "todos". Quando usado nos campos de dias do mês e dias da semana, significa "todos os dias do mês" e "todos os dias da semana", respectivamente.
    

Uma vez compreendido o formato do `cron`, e lembrando que você deve usar o horário em `UTC`, você pode ajustar para sua necessidade.

Depois disso, execute o comando:

```bash
crontab -e
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707498427/19daa173-814c-467c-8e51-6e210ecba533.png align="center")

E adicione o seguinte conteúdo na última linha:

<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">Lembre-se de ajustar o exemplo abaixo para a expressão <code>cron</code> de sua escolha</div>
</div>

```bash
0 7 * * * ~/reboot-script.sh
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707582563/c72ff77e-1f7e-4e52-9c2e-28fc5e1397bd.png align="center")

6- Crie o arquivo chamado `reboot-log.txt` com o comando:

```bash
touch reboot-log.txt
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707608711/d52bf9c3-4919-4bfa-b877-974e7f1d6764.png align="center")

7- Esse arquivo de log pode se tornar grande com o passar do tempo, então vamos automatizar a limpeza do tamanho dele também para que não ocupe muito espaço no disco com o comando:

```bash
sudo nano /etc/logrotate.conf
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707522549/40b98114-32c8-4c41-a4cb-5fb097cf55b3.png align="center")

E ao final do arquivo, adicione o conteúdo:

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Isso irá manter os logs por 15 dias, você pode alterar o <code>rotate</code> para o número de sua preferência e necessidade.</div>
</div>

```bash
~/reboot-log.txt {
    daily
    rotate 15
    compress
    delaycompress
    missingok
    notifempty
}
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710707757331/848c0aa0-baa9-4723-8c42-4bfeca4ca9ad.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Como usamos o editor nano, lembre-se de salvar pressionando <code>Ctrl + X + Y (yes) + Enter</code> em seu teclado para salvar.</div>
</div>

---

## Conclusão

Vimos que não há opções disponíveis diretamente no console do Digital Ocean para reiniciar um Droplet até o momento que este artigo foi criado, também vimos que é possível reiniciar esse droplet através do `SSH` de forma manual, mas passamos por uma resposta curta com copiar e colar um único comando para atingir esse objetivo, até um tutorial mais detalhado para que você possa fazer o passo a passo que automatiza esse processo seguindo essa ordem de etapas:

1. Crie um arquivo de script chamado `reboot-script.sh`, ele será responsável por adicionar linhas no log e reiniciar o droplet
    
2. Torne esse arquivo executável
    
3. Crie um arquivo chamado `reboot-log.txt`, ele será responsável por armazenar os logs de reinicialização
    
4. Configure um `log rotate` para este arquivo `reboot-log.txt`, ele será responsável por limpar e manter o arquivo de log otimizado
    
5. Configure um `cron` para executar o `reboot-script.sh`, ele será responsável por "chamar" nosso `reboot-script.sh` no horário adequado, desta forma adicionando uma linha no log e reiniciando o droplet
    

Você pode visualizar o log com o comando:

```bash
cat reboot-log.txt
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1710962849460/253aebc9-72a4-45d7-9c3f-7a1bb225445c.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Observe que na imagem acima, alterei em um dos dias o <code>cron</code> para <code>17 horas UTC</code>, era um horário que estava conectado no <code>SSH</code> e que podia testar seu reboot sem precisar aguardar o horário do <code>cron</code>, você pode fazer o mesmo para testar sem ter que ficar esperando, uma vez que achar que está certo, ajuste novamente o <code>cron</code> para seu horário de preferência.</div>
</div>

Se você estiver buscando outras opções, talvez essas leituras e tutoriais sejam de seu interesse:

* 👉 [Aprenda a Reiniciar sua Instância Lightsail com Agendamento Automático](https://simplescloud.io/aprenda-a-reiniciar-sua-instancia-lightsail-com-agendamento-automatico)
    
* 👉 [Aprenda a Reiniciar sua instância EC2 com Agendamento Automático](https://simplescloud.io/aprenda-a-reiniciar-sua-instancia-ec2-com-agendamento-automatico)
    

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Lembre-se de excluir todos os recursos ao final para não obter cobranças indesejadas e manter sua conta Digital Ocean limpa e organizada.</div>
</div>

<div data-node-type="callout">
<div data-node-type="callout-emoji">✅</div>
<div data-node-type="callout-text">Espero que essa informação tenha sido útil para você!</div>
</div>
