2011-01-05 1 views
1

In Debian Lenny, wenn Sie /etc/init.d/tomcat5.5 starten, es jsvc ausgeführt und erwartet, dass es sich selbst dämonisieren.jsvc (Tomcat) dämmt nicht richtig, wenn mit Backticks ausgeführt und dann defunciert

Von einer einfachen Bash Shell funktioniert das gut.

jedoch aus einem Skript, das vollständig klemmt:

Zum Beispiel sind die folgenden Arbeiten wie ein Charme:

#!/usr/bin/perl 
my $cmd = '/etc/init.d/tomcat5.5 start'; 
system($cmd); 

Allerdings wird die folgende stecken als jsvc nicht funktioniert daemonize:

#!/usr/bin/perl 
my $cmd = '/etc/init.d/tomcat5.5 start'; 
`$cmd`; 

es wird auch stecken, wenn es in Backticks bash mit ausgeführt wird:

Ist das ein Fehler in jsvc? Irgendeine Idee, warum das in einer Shell funktioniert oder system() verwendet, aber keine Backticks verwendet? Ich erhalte aufgrund dieses Problems eigentlich nicht mehr funktionierende/Zombie-Prozesse.

Antwort

1

Nur eine Ahnung - Damit ein Job ein Daemon wird, muss er alle Dateideskriptoren schließen, die im übergeordneten Prozess geöffnet wurden. Vielleicht ist das einfacher mit system als mit Backticks/readpipe, obwohl ich keine guten Gründe finden kann, warum das so wäre. Was passiert, wenn Sie die Backticks wie verwendet:

`$CMD </dev/null> /dev/null 2>&1` 
0

Backticks wird an die Ausgabe des Befehls bewerten, wenn viele Daten ist, können Sie den Puffer füllen. Sie müssen die Backticks nicht verwenden, wenn Sie die Ausgabe im Skript selbst nicht evaluieren oder katapieren möchten.

Im Beispiel sollte dieser Bash-Skript arbeiten:

#!/bin/bash 
CMD="/etc/init.d/tomcat5.5 start" 
# note no backticks 
$CMD 

auch definieren bitte "daemonize"? Sie wollen diese nohup 'd und asynchron?

Verwandte Themen