Newsgroup: it.comp.os.linux.sys
Titolo: Far partire processo in automatico

Salve a tutti,
ho un server linux con tomcat che gira come application server.
Oggi ho trovato il tomcat stoppato inspiegabilmente.
C'è un modo per rilanciarlo in automatico, se dovesse chiudersi da solo
un'altra volta?
Grazie mille!

DzU ha scritto:

E' stato discusso non più di un mese fa.
O usi degli applicativi che monitorizzano il server oppure ti fai tu 
stesso un applicativo che controlla se tomcat è attivo.
Hint:
pidof <processo_da_monitorare> (non so il nome di tomcat)
se non è presente il pid, allora lo riesegui.
tutto in crontab ogni minuto.

 un'altra volta?
Ciao,
 prova a cercare "respawn" in "man inittab" ...
 Ciao
 Federico

  Federico
Non conosco tomcat ma apache in inittab (con respawn) non ci va di 
certo. Genera dei figli poi muore. L'init sarebbe costretto a riavviarlo 
in continuazione.

Alessandro ha scritto:

no, perche' quello che spawna i figli resta su
ciao,
--
oggei

> no, perche' quello che spawna i figli resta su
Be infatti ho controllato ed ho detto una stronzata.
anche httpd resta su. (chissà perchè ho detto una stronzata del genere)
Non so tomcat però....

 
Intanto grazie a tutti!
Ho provato su un server di test con il demone ftp.
In inittab ho messo:
ftp:2345:respawn:/path/to/ftp start
poi ho dato:
init 1 e init 5. Durante il caricamento ho visto una sfilza di ftp start e
il processo era attivo. Ho provato a killarlo ma non è tornato su. 
Cosa sbaglio?
Grazie!

 
Ok adesso funziona. Solo non ho capito dopo quanto il processo viene
rilanciato. 
C'è un modo per impostare un tempo?
Come posso fare per aggiungere la riga in inittab e far rilanciare il
servizio in automatico senza cambiare runlevel/riavviare il server?
Grazie a tutti.



mi rispondo da solo:
init q
e mi insulto da solo:
bastava guardare man init
:D

 anche httpd resta su. (chissà perchè ho detto una stronzata del genere)
Forse perche' te l' avevo suggerita io. Non so Apache, pero' molti servers
usano questa tecnica che e' la piu' corretta per daemonizzare: Anche
Richard Stewens suggerisce questo.
in perldoc perlipc c' e' un esempio della funzione daemonize che genera
un processo che verra' eseguito in nuova sessione, poi il padre chiama
exit() e il figlio che viene adottato da init continua come demone
use POSIX 'setsid';
sub daemonize {
  chdir '/'                 or die "Can't chdir to /: $!";
  open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
  open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
  defined(my $pid = fork()) or die "Can't fork: $!";
#  nota bene il fork ^^^
  exit if $pid;
# processo padre se ne va.
  setsid()                  or die "Can't start a new session: $!";
  open STDERR, '>&STDOUT'   or die "Can't dup stdout: $!";
}
Quindi un servizio cosi' concepito sara' soggetto al problema che tu dici.
Si potrebbe cercare una opzione tipo -nodaemon per non fargli fare questo,
ma non c' e' un modo universale, se non il rimpiazzo di init con initng
come gia' detto.
ciao
Roberto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Richard Stewens suggerisce questo.
Non saprei se me l'hai suggerita tu. Proprio non ricordo.
Comunque, quello a cui non avevo mai fatto caso, è che apache mantiene 
il processo padre in vita. Io avevo dato per scontato l'uccisione 
(proprio perchè è il metodo più corretto) ma con apache non è cosi.
Diciamo che ho parlato senza verificare.