Newsgroup: it.comp.os.linux.sys
Titolo: Un indicatore per vedere quando ha finito ..

Salve e auguri a tutti.
Nei giorni scorsi ho installato leafnode che all'ip-up mi scarica
automaticamente le news (funziona egregiamente). Ho il problema che, dal
momento che non ho flat, adsl o ammennicoli gratuiti vari :(, quando ha
finito vorrei chiudere la comunicazione e quindi cercavo la possibilità di
avere un indicatore, anche semplicemente un messaggio che a scaricamento
completato mi avvertisse.
Una info da chi usa leafnode: se si interrompe il collegamento prima che
finisca di scaricare (es. cade la linea) al riavvio è in grado di
completare senza fare casini?
Qualcuno ha qualche consiglio da darmi?
Ciao & TIA
Antonio
-- 
**** !!!! attenzione: campo From alterato !!!! ****
-------------------------------------------------------------
Antonio Madesani: amadesani(at)libero(punto)it

 Qualcuno ha qualche consiglio da darmi?
Un'alternativa è mettere in cronjob il seguente scritp:
#!/bin/bash
# controlla se si e' connessi
if (/sbin/ifconfig | grep -F -e ppp) then
   # se si e' connessi, controlla se e' rimasto un task pendente e lo killa
   if (ls /var/lock/news | grep fetchnews) then
      rm -f /var/lock/news/fetchnews.lck
      killall fetchnews
   fi
   /usr/local/sbin/fetchnews -v
fi
Questo provvede 1) a verificare se si è connessi; 2) in caso di
connessione attiva il download delle news.
Così lo puoi far girare in cronjob costante.
Potenza della console :-)
-- 
Massimo Bacilieri AKA Crononauta 
ICQ:4005815

 Così lo puoi far girare in cronjob costante.
Si e no.
C'è un errore di fondo nella programmazione, imho.
Se lo si mette in cron ogni minuto, uccide il processo precedente pure se
non ha completato l'esecuzione.
Bisogna metterlo in cron in modo che, girando, ragionevolmente faccia il
kill per sicurezza ma considerando che il vecchio processo sia già finito. 
Se ci metti 10 minuti a scaricare le news, mettilo in cron ogni 20, ad
esempio.
Oppure andrebbe messo un qualche file di lock solo per lo script che non
killi una fungia se il fetchnes precedente non è completato (che è la
soluzione migliore).
Max

 soluzione migliore).
Il problema è che non puoi sapere se il fetchnews precedente non è
completato perché sta ancora lavorando, oppure perché si è bloccato... a
quel punto l'unico modo è temporizzare il processo e assumere che 20
minuti DEVONO bastare, scaduti i quali comunque sia killi e riparti.
Perché anche mettendo un file di lock relativo solo a questo processo,
nonè che risolvi molto:
#!/bin/bash
# verifica se il processo precedente e' ancora attivo
if ! (test -f /tmp/scaricanews.lck) then
   # controlla se si e' connessi
   if (/sbin/ifconfig | grep -F -e ppp) then
      # se si e' connessi, controlla se e' rimasto un task pendente e lo killa
      if (ls /var/lock/news | grep fetchnews) then
         rm -f /var/lock/news/fetchnews.lck
         killall fetchnews
      fi
	  touch /tmp/scaricanews.lck
      /usr/local/sbin/fetchnews -v
	  rm -f /tmp/scaricanews.lck
   fi
fi
Però così facendo risolvi solo il problema di fetchnews che si chiude
prima di finire il download, ma non quello di fetchnews che si blocca
restando "zombie" in background, perché finché fetchnews è attivo - per
quanto zombie - anche lo script è attivo in attesa di conclusione, e al
rm -f /tmp/scaricanews.lck non ci arriva...


Nell'articolo <slrnbv5n7q....@ulibarra.localdomain>, 
Crononauta ha scritto:
----Snippo perché sappiamo di cosa si sta parlando ;)
-----
Si potrebbe rovesciare il problema ovvero impedire la chiusura del
collegamento da parte di un utente che viene avvertito che c'è il processo
di scaricamento in corso ?
A quel punto entrerebbe in gioco il kill della connessione dal momento che
non vi sono processi attivi.
La programmazione è un arte per giovani, ed io ...
Lancio l'idea, se è realizzabile potrebbe essere utile considerando ad
esempio che uno dei computer della mia rete è in un'altra stanza e quando,
chi ha aperto il collegamento ha finito di usare la rete, chiede (a voce ...) 
se può chiudere.
Ciao


 se può chiudere.
Si potrebbe fare una cosa un po' più raffinata però...
Ovvero, abilitare dei flag-utente che danno il "via libera" alla
chiusura della connessione. Quando uno ha finito di scaricare quello che
gli interessa, abilita il flag che dice al sistema "ok per me puoi
chiudere". Un cronjob va a verificare tutti i flag degli utenti, e
quando TUTTI sono abilitati alla chiusura, stacca la connessione.
Qualcosa di questo tipo:
Abilitatore di flag: /usr/local/bin/puoichiudere.sh
#!/bin/bash
echo 1 > ~/.puoichiudere
con permessi 0755 root.root (o magari 0750 root.gruppo con gli utenti
che possono abilitare la funzione inseriti in "gruppo"... ma poi queste
sono personalizzazioni che ti fai ad libitum).
Controllore ciclico: /usr/local/sbin/controllachiusura.sh
#!/bin/bash
UTENTI=`cat /etc/elencoutenti`
ATTIVI=0
CONTATORE=0
for UTENTE in $UTENTI; 
   do
      CONTATORE=$[CONTATORE+1]
      if ( test `cat /home/$UTENTE/.puoichiudere` -eq 1 ) then
         ATTIVI=$[ATTIVI+1]
	  fi
   done;
if ( test ATTIVI -eq CONTATORE ) then
   killall pppd
   for UTENTE in $UTENTI;
      do
	     echo 0 > /home/$UTENTE/.puoichiudere
	  done;
fi
Questo controllore ciclico lo puoi mettere in cronjob cadenzato a 1
minuto. Anche questo ovviamente 0755 root.root o 0750 root.gruppo, a
scelta.
In pratica, quando un utente dice "per me puoi chiudere" non fa altro
che lanciare "puoichiudere.sh". Questo imposta a 1 il flag che viene
controllato dal controllore ciclico. Se usi un desktop grafico, puoi
associarlo a un comando di menu, a un'icona o a quel che ti pare, in
modo da poterlo selezionare con un semplice clic del mouse.
Il controllore ogni minuto va a scandire tutti i flag degli utenti, il
cui elenco va inserito in /etc/elencoutenti, e quando finalmente li
trova tutti a 1, abbatte la connessione e - importantissimo - reimposta
a zero i flag per la connessione successiva.
Questo se non ho scritto baggianate feroci negli script ;-)
