Logo Hardware.com.br
Alexandre Castro
Alexandre Ca... Membro Junior Registrado
88 Mensagens 0 Curtidas

Como programar servidor para Desligar e Ligar automaticamente.

#1 Por Alexandre Ca... 06/09/2016 - 11:53
Eae galera, blz?

Eu gostaria de saber como que eu faço para programar meu servidor para desligar ou hiberna pela noite e ligar novamente em um horário programado.
Por exemplo: O servidor desligaria as 00:00 noite e ligaria novamente as 06:00 da manhã.
Hosco
Hosco General de Pijama Registrado
1.5K Mensagens 617 Curtidas
#4 Por Hosco
06/09/2016 - 13:17
Alexandre Castro disse:
poderia me mandar a sintaxe do comando? Pq nao vou programar o servidor para desligar as ooeek.pngo, talvez mais cedo ou mai tarde.

Colega, te demos quase toda a solução em apenas uma linha. Agora, você quem deve adaptar o script a sua necessidade.
A sintaxe do comando principal é exibida com rtcwake --help . Quanto ao crontab, este artigo também lhe dará tudo quase pronto: https://www.hardware.com.br/dicas/agendando-tarefas-rotinas-cron.html
Recuperação de Dados - HD|STORAGE
☎ (11)2263.1384 | ◌ https://hosco.io
Alexandre Castro
Alexandre Ca... Membro Junior Registrado
88 Mensagens 0 Curtidas
#6 Por Alexandre Ca...
06/09/2016 - 14:09
Tem um amigo meu que me passo o comando rtcwake, que desligar a maquina e liga novamente no tempo que eu colocar. Porem tem dua sintaxes;
rtcwake -m disk -s (essa seria para desligar a maquina e ligar dps de segundos, exemplo: rtcwake -m disk -s 60)
rtcwake -m disk -t (essa seria para desligar a maquina em um horário desejado, exemplo: rtcwake -m disk -t 1500)

- Porem estou com dois supostos problemas, quando eu executo o comando para desligar apos segundos, a hora esta errada. Tipo, nesse exato momento é 14:05, quando executo o comando, horário esta uns 10 a 15 minutos atrasado.... Maaas quando executo o comando date para verificar a hora, esta corretamente igual a da minha maquina.

- E quando eu executo o comando para ligar a maquina em tal horário, exemplo: rtcwake -m disk -t 1600. aparece essa seguinte mensagem: rtcwake: time doesn't go backward to Thu Jan 1 00:26:40 1970 , como eu entendi mais ou menos, ele qer me dizer q é impossível voltar ao tempo, que seria ai no caso janeiro de 1970 as 00:26. Mas minha hora e data do servidor esta ok: Ter Set 6 14:07:15 BRT 2016

Se poderem ajudar agradeço.
faguirre
faguirre Super Zumbi Registrado
4.2K Mensagens 1.5K Curtidas
#7 Por faguirre
06/09/2016 - 17:19
O parametro -t pede como entrada o tempo unix (https://pt.wikipedia.org/wiki/Era_Unix)
O comando date faz o serviço de conversão de data amigável para era unix.

Exemplo de comando:

sudo rtcwake -m mem -l -t $(date +%s -d ‘tomorrow 06:30’)


O código acima assume que o relógio de máquina é a hora local (-l) o modo de desligamento é o "mem", isto é ele suspender para a memória ram e o $(date +%s -d ‘tomorrow 06:30’) retorna o tempo unix de amanhã as 6:30.
Alexandre Castro
Alexandre Ca... Membro Junior Registrado
88 Mensagens 0 Curtidas
#8 Por Alexandre Ca...
06/09/2016 - 19:32
faguirre disse:
O parametro -t pede como entrada o tempo unix (https://pt.wikipedia.org/wiki/Era_Unix)
O comando date faz o serviço de conversão de data amigável para era unix.

Exemplo de comando:

sudo rtcwake -m mem -l -t $(date +%s -d ‘tomorrow 06:30’)


O código acima assume que o relógio de máquina é a hora local (-l) o modo de desligamento é o "mem", isto é ele suspender para a memória ram e o $(date +%s -d ‘tomorrow 06:30’) retorna o tempo unix de amanhã as 6:30.



Então na vdd eu so precisava executar o comando sudo rtcwake -m mem -l -t 06:00
E salva esse comando no crontab para ser executado todo dia as 00:00 noite.

Exemplo: Script do rtcwake
#!/bin/bash
[HASHTAG]#Desligando[/HASHTAG] servidor toda noite
rtcwake -m mem -l -t 06:00

Salva-lo em /usr/local/bin/servidoroff.sh

E no crontab:
00 00 * * * /usr/local/bin/servidoroff.sh

Estaria certo minha logica?

Fonte: https://www.hardware.com.br/dicas/agendando-tarefas-rotinas-cron.html
faguirre
faguirre Super Zumbi Registrado
4.2K Mensagens 1.5K Curtidas
#11 Por faguirre
06/09/2016 - 22:41
6:00 da manhã do dia 7 de setembro de 2016 na época unix é 1473238800

O paremetro -t do rtcwake só compreende época unix, por isso seu comando não irá funcionar pois 6:00 é diferente de 1473238800

O comando date faz essa conversão para você, através do parâmetro %s

O código que postei acima, faz com que o sistema entre em suspensão e retorne as 6 horas do dia seguinte ao dia em que o comando foi rodado.

O link da wikipedia que postei explica o que é época unix e o próximo link explica a sintaxe do comando date. http://prestrelocristiano.blogspot.com.br/2012/06/durante-o-desenvolvimento-de-alguns.html
Alexandre Castro
Alexandre Ca... Membro Junior Registrado
88 Mensagens 0 Curtidas
#12 Por Alexandre Ca...
07/09/2016 - 00:19
faguirre disse:
6:00 da manhã do dia 7 de setembro de 2016 na época unix é 1473238800

O paremetro -t do rtcwake só compreende época unix, por isso seu comando não irá funcionar pois 6:00 é diferente de 1473238800

O comando date faz essa conversão para você, através do parâmetro %s

O código que postei acima, faz com que o sistema entre em suspensão e retorne as 6 horas do dia seguinte ao dia em que o comando foi rodado.

O link da wikipedia que postei explica o que é época unix e o próximo link explica a sintaxe do comando date. http://prestrelocristiano.blogspot.com.br/2012/06/durante-o-desenvolvimento-de-alguns.html



Mas esse código so iria funcionar no caso se eu executa-lo no dia de hoje, que seria 06/09/2016... Como que eu faço para descobrir o código unix de apenas 6 da manhã, para ser executado todos os dias no script do crontab. É possível?
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#13 Por jqueiroz
07/09/2016 - 00:30
O código funciona todos os dias, Alexandre. Pra isso tem o shellscript embutido.

Uma coisa que eu estou observando... esse comando normalmente não é pra desligar o sistema, e sim pra colocá-lo em suspensão. Significa que enquanto estiver em suspensão, vc não pode cortar a energia da máquina, ou ela não volta da "soneca". Outra coisa, a máquina tem que ter as funções de energia da ACPI funcionando, e nem todos os desktops vão ter isso; há o risco, inclusive, de vc não encontrar isso num servidor de grife, por pura falta de necessidade...
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
Alexandre Castro
Alexandre Ca... Membro Junior Registrado
88 Mensagens 0 Curtidas
#14 Por Alexandre Ca...
07/09/2016 - 02:07
jqueiroz disse:
O código funciona todos os dias, Alexandre. Pra isso tem o shellscript embutido.

Uma coisa que eu estou observando... esse comando normalmente não é pra desligar o sistema, e sim pra colocá-lo em suspensão. Significa que enquanto estiver em suspensão, vc não pode cortar a energia da máquina, ou ela não volta da "soneca". Outra coisa, a máquina tem que ter as funções de energia da ACPI funcionando, e nem todos os desktops vão ter isso; há o risco, inclusive, de vc não encontrar isso num servidor de grife, por pura falta de necessidade...



Cara, so estou com uma duvida com o crontab, o resto entendi e agradeço a todos.

Eu criei um arquivo chamado servidor-off em uma pasta dentro do root /Shell\ para\ o\ servidor/servidor-off cuja o conteúdo dentro desse arquivo seria:
#!/bin/bash
rtcwake -m disk -l -s 18540

Dei permissão de execução com o chmod +x, e testei com o (./). Comando foi executado normalmente.

Dentro do crontab -e, fiz a seguinte configuração: 00 01 * * * /Shell\ para\ o\ servidor/servidor-off
Reiniciei o serviço com: /etc/init.d/crontab restart
Porem quando chegou na hora configurada, que seria as 01:00 da manhã, o comando não foi executado. Alguém saberia me explicar o motivo?
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#15 Por jqueiroz
07/09/2016 - 10:19
Primeiro, péssima escolha de nomes. Pq criar uma pasta "Shell para o servidor" se poderia ser apenas "servidor"? Ou nem criar nada, aproveite as pastas que já existem, como a "/usr/local/bin", que existe exatamente pra isso.

Segundo, vc disse que criou dentro do root. Dentro do root, vc diz, na raiz do sistema de arquivos? Não se mexe na raiz do sistema de arquivos. Aliás, criou na raiz (/) ou dentro da pasta home do root (/root)?

Terceiro... vc disse que mexeu no crontab. Em qual crontab vc mexeu? Em /etc/crontab? Ou no crontab do root, pelo comando "crontab -e"? Pq se mexeu no primeiro (o que eu não recomendo), a sintaxe é diferente.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal