# Linux: Shutdown se inutilizzato

## -YoShi-

E' possibile attivare lo shutdown se il pc rimane inattivo per un tot di tempo?

Il computer in questione è una specie di server storage,  lo accendo col wake on lan, gli carico i miei backup e per spegnerlo in genere mi collego via ssh e lancio lo shutdown.

Solo che è un po' una menata tutte le volte per spegnerlo, e imossibile "a meno di creare uno script in phyton" se accedo ai file sul pc dall'xbox con l'xbox media center (tutte le volte devo andare in camera, loggare via ssh dal mini e spegnero) oppure da un pc windows (si, lo so c'è putty).

Se ci fosse modo di impostare lo shutdown quando il pc rimane inattivo che so per 5-10 minuti sarebbe favoloso.

----------

## bender86

Potresti usare uno script tipo

```
#!/bin/bash

while [ "0" -eq "0" ]

do

    sleep 10m

    UTENTI=`w | wc -l`

    [ "${UTENTI}" -eq "0" ] && shutdown -h now

done
```

ed eseguirlo all'avvio.

L'idea dovrebbe funzionare, ma non posso controllare al momento.

----------

## Ic3M4n

hai il problema però che se rimani loggato per esempio in una console ti riporta il numero di utenti collegati. bisognerebbe anche controllare se ci sono programmi attivi.

----------

## makoomba

Moved from Forum italiano (Italian) to Forum di discussione italiano.

----------

## Luca89

bisognerebbe controllare il traffico di rete per quanto riguarda la porta del file server e spegnere il pc se il carico risulta nullo per 5 o 10 minuti.

----------

## bender86

 *Ic3M4n wrote:*   

> hai il problema però che se rimani loggato per esempio in una console ti riporta il numero di utenti collegati. bisognerebbe anche controllare se ci sono programmi attivi.

 

In effetti... Potrebbe creare un file di lock quando fa il backup, e cancellarlo quando termina. Il controllo potrebbe basarsi su quel file.

----------

## -YoShi-

 *Ic3M4n wrote:*   

> hai il problema però che se rimani loggato per esempio in una console ti riporta il numero di utenti collegati. bisognerebbe anche controllare se ci sono programmi attivi.

 

Quello non sarebbe un problema, xchè così eviterei di interrompere il lavoro a qualcuno connesso, chessò di mio fratello, ecc.. Se usassi invece il risparmio energetico? 

Il difficile è come capire che non ci sono processi attivi tra samba, ftp, ssh. se questi non stanno lavorando allora può spegnere il pc.

----------

## Ic3M4n

no, aspetta. se un servizio è attivo ma nessuno lo usa non ti occupa risorse, a parte un po' di ram.

in questo caso credo che ti convenga controllare il carico del processore e gli utenti collegati. se il carico del processore è sotto una soglia minima per tot tempo e non ci sono collegati utenti lo spegni.

----------

## -YoShi-

Si ma se mi si collegano altri utenti con samba? o con l'ftp? vale lo stesso?

----------

## mrfree

Io dovrei fare uno scriptino per uno dei miei serverini calinghi, pensavo di fargli analizzare la rete che "serve" se non ci sono pc accesi per una 10-ina di minuti si spegne, poi se il tuo lo supporta potresti prevedere una riaccensione tramite WakeupOnLAN

----------

## xdarma

 *-YoShi- wrote:*   

> E' possibile attivare lo shutdown se il pc rimane inattivo per un tot di tempo?

 

Forse non ho capito il tuo problema, ma se il pc è "raggiungibile" fisicamente, ti basta configurare l'acpi-event e quando schiacci il power-button parte la procedura di spegnimento.

Se il pc è sepolto in cantina forse ti conviene mandare in stand-by il computer con qualche power manager dei portatili che ti rallenta la cpu, spegne il disco, manda tutto in suspend-to-ram.

Sempre che il tuo hardware supporti queste features e che io abbia capito cosa cerchi di fare.

----------

## makoomba

la soluzione più semplice è spegnere il server quando il traffico di rete non supera una certa soglia nell'arco di uno specifico intervallo.

il check è semplice, basta fare la differenza tra due invocazioni di 

```
grep eth0 /proc/net/dev | awk '{print $9}'
```

per ricavare i bytes trasmessi.

----------

## -YoShi-

@mrfree: è proprio quello che avrei bisogno anche io.

@xdarma: L'avevo già fatto. il problema è che comunque dovrei andare fisicamente dove si trova il pc e spegnerlo. Io volevo evitarlo (sn mooolto pigro)  :Smile: 

@makoomba: Lo script che hai postato da "0" come valore, sia che non faccia niente sia quando copio la roba attraverso la rete.

----------

## makoomba

posta

```
cat /proc/net/dev
```

----------

## -YoShi-

Eccolo:

```

robypc ~ # cat /proc/net/dev

Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

    lo:     200       4    0    0    0     0          0         0      200       4    0    0    0     0       0          0

  eth0:    9038      75    0    0    0     0          0         0    10747      91    0    0    0     0       0          0

  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
```

L'ho lanciato da una console ssh xò, non so se cambia qualcosa.

----------

## makoomba

se lo lanci ora dovrebbe darti almeno 10747.

in ogni caso non capisco il perchè dello 0, visto che hai detto di aver generato traffico anche prima.

posta ifconfig.

----------

## mrfree

La mia idea è utilizzare qualcosa tipo nmap

```
$ nmap -sP 192.168.2.*

Starting Nmap 4.01 ( http://www.insecure.org/nmap/ ) at 2006-10-08 20:26 UTC

Host 192.168.2.1 appears to be up.

Host 192.168.2.6 appears to be up.

Nmap finished: 256 IP addresses (2 hosts up) scanned in 2.444 seconds
```

parsando potrei ottenere quello che mi serve. Ovviamente utilizzare nmap per questo è come sparare ad una mosca con un acceleratore protonico dei ghostbuster però tanto nmap ce l'ho comunque sul server quindi  :Wink: 

L'idea di makoomba è invece molto interessante e la terrò a mente quando mi deciderò a fare qualche test su strada... o meglio su rete  :Smile: 

----------

## -YoShi-

Com'è che non mi funziona?

```

robypc ~ # cat /proc/net/dev

Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

    lo:     200       4    0    0    0     0          0         0      200       4    0    0    0     0       0          0

  eth0:   23272     175    0    0    0     0          0         0    14359     108    0    0    0     0       0          0

  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

robypc ~ # grep eth0 /proc/net/dev | awk '{print $9}'

0

robypc ~ # 
```

mrfree che è nmap?

----------

## syntaxerrormmm

 *-YoShi- wrote:*   

> mrfree che è nmap?

  :Shocked: 

Mai fatto un portscan? http://insecure.org/nmap/

Ciao.

----------

## -YoShi-

No.. e credo di non averne bisogno dato che non sono una potenziale preda di hackers ne tantomeno custodisco segreti..  :Smile: 

In breve mi riassumi che fa?

----------

## mrfree

 *-YoShi- wrote:*   

> In breve mi riassumi che fa?

 

Certo... http://it.wikipedia.org/wiki/Port_scanning

----------

## -YoShi-

Ok, mi sono letto il solito link esterno.. 

In pratica hai intenzione di vedere se la porta che usa per es. samba è aperta o chiusa e in base al "ciclo if" fare una determinata operazione?

Ma se per esempio un computer connesso si dimenti aperta una connessione?

----------

## mrfree

mmhhhh... No  :Smile: 

```
nmap -sP 192.168.2.*
```

 *man nmap wrote:*   

> -sP: Ping Scan - go no further than determining if host is online

 

----------

## makoomba

@-YoShi-

scoperto l'arcano, questa

```
grep eth0 /proc/net/dev | cut -d':' -f2 | awk '{print $9}'
```

dovrebbe andare

@mrfree

puoi evitare nmap ed ottenere un risultato analogo usando

```
(seq -f '192.168.2.%g' 1 254 | xargs -n 1 -P 254 ping -c1 -w1) 2>/dev/null | grep icmp | wc -l
```

risultato = n° di hosts che rispndono al ping

----------

## mrfree

 *makoomba wrote:*   

> @mrfree
> 
> puoi evitare nmap ed ottenere un risultato analogo usando
> 
> ```
> ...

 

Ottimo   :Very Happy: 

Grazie lo utilizzerò sicuramente

----------

## -YoShi-

Ok ora funge! 

```

robypc ~ # cat /proc/net/dev && grep eth0 /proc/net/dev | cut -d':' -f2 | awk '{print $9}'

Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

    lo:     200       4    0    0    0     0          0         0      200       4    0    0    0     0       0          0

  eth0:   14894     144    0    0    0     0          0         0    19405     137    0    0    0     0       0          0

  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

20207

robypc ~ # 

```

Ma ora come mi comporto?

----------

## makoomba

produci un banale script che:

prende il primo valore, aspetta 10m, prende il secondo e fa la differenza.

se la differenza è < di una soglia che decidi te, spegne il pc altrimenti ripete il ciclo.

----------

## -YoShi-

Un aiutino? non è che sia tanto preparato...   :Embarassed: 

dovrei usare un qualcosa che prenda il valore da una stringa.. 

fare un timer

fare partire il timer e leggere il valore dei pacchetti(con la stringa di makoomba) 

lettura1 = valore1

dopo 10 minuti prendo il valore2

lettura2 = valore2

dopo 1 minuto prendo il valore3

lettura3 dopo 1 minuto

lettura3 = valore3

variabile1 = (lettura1 + lettura2) / 2 

fare un ciclo if per decidere se (lettura1 + 200 =< variabile1)

{

fai partire un altro if (lettura2 + 200 >= variabile3)

 {

    allora fai partire lo shutdown;

 }

else rifai partire lo script da capo. 

Giusto?

----------

## djinnZ

 :Twisted Evil: Last edited by djinnZ on Mon Feb 23, 2009 8:08 pm; edited 1 time in total

----------

## GiRa

A parte il fatto che per i componenti meccanici son peggio due avvii in un giorno che stare accesi costantemente, a parte che puoi far consumare il pc pochissimo scalando il processore e usando hdparm, puoi usare xinetd.

Con xinetd che ti fa da supervisore attivi samba, ssh e quello che vuoi solo quando serve e, quando rilevi che non sta facendo nulla, puoi spegnere.

----------

