você está aqui: Home  → Arquivo de Mensagens

Desligar e ligar automaticamente servidores todos os dias

Colaboração: Wendell Almeida

Data de Publicação: 14 de dezembro de 2012

Podemos colaborar com a TI verde desligando servidores que não necessitam ficar ligados 24hs por dia 7 dias por semana.

Pensando em uma empresa que funciona somente em horário comercial de segunda a sexta feira entre 09:00 e 18:00hs, podemos realizar uma programação para que automaticamente o servidor desligue por volta das 20:00hs e ligue no dia seguinte às 08:55hs, permanecendo desligado sábado e domingo.

O script abaixo realiza essa operação:

  #!/bin/bash
  
  logger=$(which logger)
  test -x $logger || exit 1
  
  # Horário que o servidor será ligado
  HOUR_UP="08:55:00"
  
  # Primeira segunda do mês o servidor não será desligado
  WEEKDAY1=Mon
  
  LANG=C
  LC_ALL=C
  DATE=$(date +%a)
  DAY=$(date +%d)
  shutdown=$(which shutdown)
  poweroff="$shutdown -h now"
  THIS="shutdown_system"
  date="date -u"
  WAKEALARM=/sys/class/rtc/rtc0/wakealarm
  
  ## Ligar o servidor na data e horário definidos
  wakeup(){
     echo 0 > $WAKEALARM
     test "$DATE" = "Fri" && $date -d "+ 3 day $HOUR_UP" +%s > $WAKEALARM
     test "$DATE" = "Sat" && $date -d "+ 2 day $HOUR_UP" +%s > $WAKEALARM
     $date -d "+ 1 day $HOUR_UP" +%s > $WAKEALARM
  #cat /proc/driver/rtc 
  }
  
  ## Desligar o servidor
  halt(){
     $logger -t $THIS "The System Shutdown!!"
     wakeup
     $poweroff
     exit 0
  }
  
  ## Verifica se o servidor será desligado ou não
  validate(){
     test $DAY -lt 7 || halt
     test "$WEEKDAY1" = "$DATE" || halt
     $logger -t $THIS "The System NOT Shutdown!!"
  }
  
  validate
  

Salve o script com o nome zzzshutdown e copie para /etc/cron.daily.

Ele deve ser o último script a ser executado para não interferir na execução das outras tarefas diárias. Por isso iniciei o nome com zzz.

Agende as tarefas semanais e mensais no cron para que sejam executas quando o servidor estiver ligado. Exemplo: /etc/crontab

  17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
  00 20    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  00 13    * * 4   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  
  # Toda primeira segunda feira do mês será executado os scripts mensais
  30 12  * * 1   root     test `date +\%d` -gt 7 || ( cd / && run-parts --report /etc/cron.monthly )
  
  # Tarefa que será executada na primeira terça do mês durante a madrugada.
  # O servidor não deverá ser desligado.
  00 1    * * 2   root    test `date +\%d` -gt 7 || /usr/slib/system.diagnostic
  

Sistema aplicado: Debian Squeeze. Talvez seja necessário ajustes para outras distribuições.



Veja a relação completa dos artigos de Wendell Almeida

 

 

Opinião dos Leitores

Heitor
20 Dez 2012, 19:36
Não sábia desta forma de fazer o wake (só BIOS e magicpacket WOL).
Agora duas dúvidas:
1- O que acontece se o computador for desenergizado (por cinco minutos por exemplo) enquanto estiver desligado? Perde as configurações de wake?
2- O que acontece se o computador estiver desenergizado no exato momento em que o wake deveria ocorrer e depois for energizado novamente logo após o horário do wake? (2 minutos por exemplo)
Stefan Billieri
14 Dez 2012, 11:45
Não é melhor deixar o servidor ligado sempre para evitar o desgaste do hardware a cada ciclo de aquecimento e resfriamento?

Não seria melhor ativar um modo de economia de energia em vez de desligá-lo?

Se eu não me engano, a Google concluiu que um HD sempre ativo dura mais.
Antonio
14 Dez 2012, 11:33
Gostei desta dica. Não sabia que dava para ligar a máquina através do sistema. Eu uso este recurso só que direto na BIOS mesmo.
Achei uma wiki em inglês que explica bem o funcionamento deste recurso.
http://www.mythtv.org/wiki/ACPI_Wakeup
Marcelo
14 Dez 2012, 10:01
Não precisa instalar nenhum programa extra para fazer o servidor ligar sozinho? E não precisa de outra máquina para enviar magicpackt para o servidor desligado? Não entendi como funciona.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script