De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários