Script perl per l'autospegnimento di un server

Segue uno script in perl che uso per far spegnere in automatico la macchina che uso come gateway per la navigazione.

Da tempo uso per la connessione Internet una piccola macchina Linux che mi serve da gateway per la navigazione da casa. In questo modo la macchina é sempre connessa, ospita alcuni servizi che mi servono, e soprattutto non devo preoccuparmi di connettermi quando mi serve connessione.

L'unico problema é che la notte devo spegnere la macchina, fino a poco tempo fa lo facevo a mano tramite ssh (la suddetta é senza monitor) solo che ogni tanto mi dimenticavo.

Per risolvere la cosa ho messo giu uno script in perl che facesse alcuni controlli e se necessario spegnesse la macchina. Messo nel cron in modo da essere eseguito dopo una determinata ora, fa il suo lavoro alla perfezione da ormai alcune settimane.

Ma veniamo allo script:
#!/usr/bin/perl

# Crontab entry:
# 0-59/5 0-5 * * * /root/pof.pl > /dev/null
# run every 5 minutes from midnight to 5

# CONFIG
my $ping="/bin/ping";
my $grep="/bin/grep";
my $shutdown="/usr/bin/poweroff";
my $pingcount=3;            # How many ping?
my $totalcheck=2;            # After this number of check poweroff
my $pingdestination="129.168.1.25";    # Which machine to ping
my $writedir="/tmp";            # A dir where we can write

# Touch support file
`touch $writedir/pof.tmp`;

# Try to ping
my $pingres = `$ping -c $pingcount $pingdestination | $grep received`;

# Analyze result
if ($pingres =~ /(\d+) packets transmitted, (\d+) received, .*/) {
    if ($2 == 0) {
        $last = `cat $writedir/pof.tmp`;
        if ($last) {
            $last++;
            if ($last > $totalcheck) {
                $last=0;
                `$shutdown`;
            }
        }
    } else {
        $last=0;
    }
    `echo $last > $writedir/pof.tmp`;
}


In pratica lo script viene chiamato dal cron, effettua un ping verso la mia macchina che uso per navigare e controlla il risultato, se la macchina é accessa non fa nulla, se invece la macchina é spenta segnala la cosa e dopo un tot numero di controlli (totalcheck) si spegne.

In questo modo se sono al PC evito che il gateway mi si spenga, e se mi dimentico di spegnerlo si spegne in automatico dopo una certa ore e dopo un tot di controlli in cui risulta spenta la mia macchina principale.

So che la cosa si poteva fare in modo migliore ma a me basta cosi per ora. :-)

Privacy Policy