lts existe uma maneira de ativar o modo de suspensão e acordar na lan?

3

Eu queria saber se era possível fazer meu servidor ir dormir depois de um determinado período de tempo, mas ainda estar atendendo a pedidos de lan. Eu uso meu servidor como um servidor de mídia que pode ser usado 3 ou 4 horas por dia e é realmente um desperdício de poder tê-lo funcionando o tempo todo. No entanto, não quero correr até o segundo andar para ligá-lo quando quisermos assistir a um filme. Eu vi alguns posts sobre como impedir que isso acontecesse, mas como você o ativa?

    
por Craig Smith 19.11.2012 / 20:41

2 respostas

4

Wake on LAN é um recurso de BIOS e NIC, não um recurso de sistema operacional, ou seja, você precisa de um BIOS e NIC de suporte para fazer isso.

Depois de habilitá-lo na sua BIOS (se possível), você pode verificar se sua NIC tem suporte a WOL ativado, verificando a saída de ethtool [interface] .

Se o valor de Supports Wake-on contiver g , sua NIC suporta pacotes mágicos do WOL.

Para verificar se ele está realmente ativado, dê uma olhada no valor de Wake-on . Se ele contiver g , sua NIC tem suporte a pacotes mágicos ativado.

Se não estiver ativado, execute o seguinte:

ethtool -s [interface] wol g

Você terá que emitir este comando toda vez que seu sistema for iniciado, então adicione-o ao local apropriado. No Ubuntu, talvez o melhor lugar seja uma regra up em /etc/network/interfaces ou o equivalente para o seu gerenciador de rede.

    
por 19.11.2012 / 21:03
0

Eu sei que isso foi feito há um ano, mas encontrei algumas soluções. O primeiro usa powernap e um script para verificar processos de execução específicos e pode ser encontrado aqui .

Segundo, vi on-line perguntas sobre o Linux . Isso usa pings para outra máquina.

Também exibi um roteador com o DD-WRT para testar o wrt wiki . Estas são soluções elegantes muito agradáveis, mas o problema que tive com elas é que elas não são adequadas para um servidor de mídia interno, porque o log captura apenas pacotes aceitos de fora da rede. Se você quer um servidor de mídia interno, isso simplesmente não funciona.

Para dd-wrt this oferece uma solução muito legal para isso usando VLANs. Basicamente coloque o servidor em sua própria sub-rede interna e monitore o tráfego para aquela VLAN, então o script anterior funciona. Isso funciona bem, mas na minha experiência o roteador e build do dd-wrt sempre que utilizei o recurso vlan do DHCP travou.

Decidi que queria uma solução para ativar e suspender meu servidor de mídia automaticamente quando acessado, o que não dependia de dd-wrt. Eu tenho um pi de framboesa, então eu usei isso. A solução final que encontrei para mim foi escrever um pequeno roteiro de bash. As dependências do raspberry-pi são etherwake e tcpdump. Ambos não são instalados por padrão no rasbian.

sudo apt-get install etherwake
sudo apt-get install tcpdump

O script de ativação é o seguinte:

#!/bin/bash

pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x  #WOL target ip address
targetMAC=00:11:22:33:44:55  #WOL target MAC

wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}

while sleep $pingInterval; do
varPing='ping -s 1 -c 2 $target > /dev/null; echo $?'
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done

A idéia principal é que ele é executado a partir do meu pi-framboesa, que irá acordar o servidor se notar uma única solicitação arp para o servidor. Se o servidor estiver acordado, ele não estará ouvindo uma solicitação de arp, mas enviará alguns pings de vez em quando para ter certeza de que ainda está ativo.

Eu nomeei o arquivo wol.sh e o tornei executável. Em seguida, coloque-o no sudo crontab para iniciar o @reboot como root. Isso é para o tcpdump que precisa de acesso elevado para ouvir eth0 e etherwake.

sudo chmod +x /home/pi/wol.sh
sudo crontab -e

adicione isso ao final

@reboot sh /home/pi/wol.sh > /dev/null

O script de suspensão é executado a partir do servidor de mídia usando o mesmo princípio. Se não houver tráfego para o servidor (excluindo icmp ou arp) durante o intervalo de varredura, escolhi 1 minuto. Então acrescente a um contador que eu nomeei sonolência. Depois que a sonolência atingir 10 ou 20, ou seja, se não houver tráfego durante vinte minutos, então a sonolência é zerada, então emite o comando pm-suspend para adormecer. Os pacotes são recebidos e sleepiness!=0 faz uma sonolência -1. Então, se ele captura um pacote perdido ou algum como você faz isso do roteador, ele não redefine a contagem de volta para zero, mas apenas faz um -1 no contador. Eu coloco isso lá porque ele permite que um período de graça caia suavemente enquanto os pacotes diminuem ao longo de um período de tempo, em vez de ter absolutamente zero pacotes por 20 minutos consecutivos.

Isso talvez não seja o melhor, porque ele precisa chamar o tcpdump em ambas as máquinas. Envolve gravações constantes no disco (do lado do servidor). Para as gravações em disco eu montei um usb sacrificial e é onde o meu arquivo de captura é salvo para evitar o desgaste do meu disco rígido real.

    
por 19.09.2014 / 18:09