Newsgroup: it.comp.os.linux.iniziare
Titolo: Monitorare processo e invio mail

 
 Ciao, ho una serie di processi da lanciare uno alla volta e che
 possono impiegare ore o giorni a terminare. A volte crashano, e
 vorrei fare in modo che il sistema mi inviasse un'email quando un
 processo termina per qualsiasi motivo. 
Come potrei monitorare la presenza di un processo e fare in modo
 che un comando (invio email) venga eseguito in caso di sua
 mancanza?
Ciao e grazie
 
 
 
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
 

 ha scritto:

Potrei lanciare il processo redirezionando l'output con &> su un
 file, e poi con && dare il comando di invio mail (ancora non so
 come fare di preciso) e spedirmi il file come corpo del messaggio
 o allegato. 
Può andare che ne dite?
-- 
 

 ...
 
Non so se ho capito bene.
Un trucchetto è ricorrere a cron, at o batch che inviano una mail 
se li imposti per inviare una mail. Io trovo che sia preferibile questo
 
( sleep 300 printf "Il tè è servito | mail  mallin ) &
 

 ha scritto:

Ok ma io non so a priori quanto durerà il job, né se crasherà. Io
 vorrei che il messaggio fosse inviato subito dopo il termine del
 run, quindi potrei mettere dei controlli a intervalli di tempi
 regolari con cron e ps, ma concatenare i comandi con && mi sembra
 più semplice. 
Mi viene il dubbio che il secondo venga eseguito solo in caso di
 uscita senza errori del primo, non so dove l'ho letto. Devo
 controllare.
Il comando mail come dici tu va sicuramente bene invece.
-- 
 

  che un comando (invio email) venga eseguito in caso di sua mancanza?
 
La cosa più semplice ed efficace è wrappare il lancio di questi processi 
in uno script che al termine manda la mail, fra l'altro avendo anche il 
controllo se il processo è terminato regolarmente o meno.

 
 
Ok ma come avviene il controllo? Avevo pensato di mettere i
 comandi in uno script in effetti...
 
-- 
 

  comandi in uno script in effetti...
 
Nella riga dopo il lancio metti l'invio dell'email, è implicito verrà 
eseguita quando il programma lanciato è terminato (salvo che non si lanci 
come demone, ma non mi pare questo il caso). $? contiene l'exit code.
 

 ( sleep 300 printf "Il tè è servito | mail  mallin ) &
 
Ops, qualche punto e qualche virgola sono sfuggiti. La versione corretta è:
 
(  sleep 300 ; printf "Il tè è servito" | mail  mallin ; ) &
 
Ovviamente ``sleep'' e "il tè è servito" sono solo esempi.
 
Come compito a casa spiegare cosa succede con le parentesi graffe:
 
{  sleep 300 ; printf "Il tè è servito" | mail  mallin ; } &

 controllo se il processo è terminato regolarmente o meno.
 
In questo caso fare un /wrapper/ potrebbe essere una soluzione più pulita.
 
 

 A parte che 
 
Senti ma... a fare in culo ci sei già andato e hai bisogno di un altro 
ticket, oppure devi timbrare ancora quello dell'altra volta?
Per sapere.

 --
 
man bash
 
 

 
Scusa non ho capito cosa sia $?
Il dollaro è indica una variabile, ma ho cercato un po' e non
 trovo nessuna guida che contenga dollaro e punto
 interrogativo
 
 
-- 
 

 
 
 
-- 
 

 
 
Se ho capito bene in questo caso non cambia molto. A parte
 l'esecuzione in una sottoshell nel caso delle graffe, la
 parentesi tonda fornisce anche l'exit status della lista dei
 comandi raggruppati
 
-- 
 

 
Ah ecco:
$? reads the exit status of the last command executed. After a
 function returns, $? gives the exit status of the last command
 executed in the function. This is Bash's way of giving functions
 a "return value."
 

  comandi raggruppati
 
l'exit status non è il solo effetto collaterale anche la visibilità dei 
parametri cambia,
 
 
 

 code.
 
È corretto ma non è proprio così. Nell'OP mi pare di aver capito
che volevi una mail anche quando avevi un /system/ /fault/, cosa 
che non sono sicuro che la mia soluzione faccia. Prima di rispondere,
per essere sicuro, dovrei fare alcune verifiche, cosa che non posso 
fare al momento perché ho una squadra di unni in casa ed un'altra  
squadra di vandali al lavoro. Se ti basta la mia soluzione bene
così altrimenti vediamo un altro giorno. 
 
 

 
No ti ringrazio, hai già fatto molto, in caso faccio io le prove. 
-- 
 

 
Giusto. Grazie
 
 
--