Table of contents
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:
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:
sudo shutdown -r now
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
2- Copie e cole o comando:
# 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
3- Edite o cron
para os horários de sua preferência alterando esse trecho:
(crontab -l 2>/dev/null; \
echo "0 7 * * * ~/reboot-script.sh"; \
echo "0 19 * * * ~/reboot-script.sh") | crontab - && \
4- Pressione Enter
para executar
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
2- Crie um arquivo chamado reboot-script.sh
com o comando:
touch reboot-script.sh
3- Agora edite esse arquivo com o comando:
sudo nano reboot-script.sh
E adicione o seguinte conteúdo:
#!/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
4- Torne o arquivo executável com o comando:
chmod +x reboot-script.sh
5- Edite o crontab
Por exemplo, para executar todos os dias às 07 horas UTC
, isso seria:
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:
crontab -e
E adicione o seguinte conteúdo na última linha:
cron
de sua escolha0 7 * * * ~/reboot-script.sh
6- Crie o arquivo chamado reboot-log.txt
com o comando:
touch reboot-log.txt
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:
sudo nano /etc/logrotate.conf
E ao final do arquivo, adicione o conteúdo:
rotate
para o número de sua preferência e necessidade.~/reboot-log.txt {
daily
rotate 15
compress
delaycompress
missingok
notifempty
}
Ctrl + X + Y (yes) + Enter
em seu teclado para salvar.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:
Crie um arquivo de script chamado
reboot-script.sh
, ele será responsável por adicionar linhas no log e reiniciar o dropletTorne esse arquivo executável
Crie um arquivo chamado
reboot-log.txt
, ele será responsável por armazenar os logs de reinicializaçãoConfigure um
log rotate
para este arquivoreboot-log.txt
, ele será responsável por limpar e manter o arquivo de log otimizadoConfigure um
cron
para executar oreboot-script.sh
, ele será responsável por "chamar" nossoreboot-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:
cat reboot-log.txt
cron
para 17 horas UTC
, era um horário que estava conectado no SSH
e que podia testar seu reboot sem precisar aguardar o horário do cron
, você pode fazer o mesmo para testar sem ter que ficar esperando, uma vez que achar que está certo, ajuste novamente o cron
para seu horário de preferência.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
👉 Aprenda a Reiniciar sua instância EC2 com Agendamento Automático