Um script de suspensão para o servidor Ubuntu

5

Vamos começar do começo: eu tenho um Pi que acorda meu servidor quando um pedido chega em tcpdump , e funciona como um convite!

Meu problema é que quero que meu servidor durma quando não houver dados de entrada por, digamos, 30 minutos. O servidor é usado apenas por mim, tanto dentro como fora da minha LAN.

Acho que preciso usar tcpdump em um script de shell para monitorar a porta ou o IP e, se não houver entrada, ela reagirá. Eu tenho uma idéia para fazer isso, porque eu olhei ao redor na internet por 2 dias, e tentei muitas coisas, mas não consigo ter sucesso.

Como posso fazer isso?

    
por Josias Kure 11.01.2016 / 12:10

1 resposta

1

Estou assumindo que "nenhum dado recebido" significa: tcpdump não está imprimindo nenhuma linha. Portanto, temos que iniciar um temporizador de 30 minutos e redefini-lo sempre que tcpdump imprimir uma linha.

Começar é bem simples:

sleep 30m && poweroff

Como podemos redefini-lo? Simples: matamos sleep e reiniciá-lo.

Como detectamos novas linhas de tcpdump ? Um bom e velho while read -r loop.

Colocando tudo junto:

#!/bin/bash

set -e

shutdown-timer() {
    # Waits 30 minutes and shuts down the computer.
    sleep 30m && poweroff
}

reset-timer() {
    # Kills 'shutdown-timer' (if it's running) and
    # restarts it, saving its PID in 'timerpid'.
    if [[ -n "$timerpid" ]]
    then
        kill "$timerpid" || true
    fi
    shutdown-timer &
    timerpid="$!"
}

# Start the timer for the first time.
reset-timer

tcpdump | while read -r line
do
    # A new packet was sent or received.
    reset-timer
done

Note que pode haver pacotes preocupantes de vez em quando. Por exemplo, você pode ter configurado o APT para verificar atualizações a cada 5 minutos. Isso impedirá que o computador seja desligado, porque o timer será redefinido a cada 5 minutos.

Se precisar, você pode filtrar a saída de tcpdump usando grep ou qualquer outra ferramenta, assim:

tcpdump | grep -v archive.ubuntu.com | while read -r line
    
por Andrea Corbellini 04.02.2016 / 22:12