Como fazer o script desta tarefa?

1
Primeiro de tudo, eu posso fazer uso básico da linha de comando do linux, mas tenho pouca ou nenhuma experiência com scripts de shell.

O que eu quero fazer: tenho um roteador executando o OpenWRT, um computador destop e um telefone Android. Quando o telefone se conecta ao wifi, eu quero o roteador para wake-on-lan meu pc.

Eu tenho uma vaga idéia de como fazer isso, mas preciso de uma pequena ajuda para juntar as peças:

  • execute um script com crontabs a cada 10 segundos para verificar se o telefone está conectado
  • O script
  • : iwinfo wlan0 assoclist para verificar se o MAC do meu telefone está conectado
  • se meu telefone estiver conectado, envie um pacote wake-on-lan
  • mantenha um pcHasBeenWokenUp booleano para que o script não envie pacotes WOL o tempo todo (porque o telefone está conectado)
  • quando o telefone desapareceu de > 10 minutos: defina pcHasBeenWokenUp como falso

a. Esta é a direção certa?

b. O script deve ser um script bash ou algo parecido com o perl?

c. Como posso manter minha variável pcHasBeenWokenUp entre os inícios do meu script?

Algumas dicas seriam muito apreciadas:)

    
por asco 18.12.2013 / 22:25

1 resposta

2

Acredito que o seu algoritmo simples funcionaria, mas você deve perceber que o roteador nunca saberá ao certo se o computador está realmente desperto ou não. Se a sua automação puder tolerar esse comportamento, você poderá implementá-lo da seguinte maneira.

if ! $pcHasBeenWokenUp; 
then 
    iwinfo wlan0 assoclist | grep $MAC &> /dev/null && wakeUpPc && export pcHasBeenWokenUp=true; 
fi

if $pcHasBeenWokenUp; 
then 
    iwinfo wlan0 assoclist | grep -v $MAC &> /dev/null && export pcHasBeenWokenUp=false; 
fi

Observe, no entanto, como foi mencionado antes, que um cronjob não pode executar scripts em intervalos de 10 segundos. Você pode, no entanto, enganá-lo, executando um job com uma periodicidade maior, que executa um loop executando sua tarefa em intervalos de 10 segundos (consulte aqui ).

Lembre-se também que esta é uma solução muito hacky, que, no entanto, faz o seu trabalho bem o suficiente. Se, no entanto, você planeja usá-lo como parte de um cenário maior, talvez seja melhor passar para os daemons.

    
por 18.12.2013 / 23:31