nohup funktionniert nicht richtig - warum??

F

fuexli

Jungspund
hi zusammen!

ich hab hier ein skript, welches mir diverse hintergrund-prozesse starten soll. zuerst zwei php-prozesse, und dann noch einige java-prozesse.
hier ein auszug aus meinem code:

Code:
### 
# start wsconsumer-Service anyway (check if running, if no, start it)
#
	pida=`ps -ef | grep php | grep wsconsumer | awk '{print $1}'`
	if [ "$pida" != "" ]; then
		echo "Service wsconsumer.php is already running (PID: $pida)"
	else
		echo "wsconsumer-Service is not running, i'm starting it..."
		cd /usr/local/projects/wsgsim/prod/simoms/appl/html/soap/app
		nohup php wsconsumer.php > /usr/local/projects/wsgsim/log/simoms/logs/wsconsumer.log &
		sleep 60
	fi
###	
# start socketDaemon-Service anyway (check if running, if no, start it)
#
	pidb=`ps -ef | grep php | grep socketDaemon | awk '{print $1}'`
	if [ "$pidb" != "" ]; then
		echo "Service socketDaemon.php is already running (PID: $pidb)"
	else
		echo "socketDaemon-Service is not running, i'm starting it..."
		cd /usr/local/projects/wsgsim/prod/simoms/appl/dispatcher/app
		nohup php socketDaemon.php > /usr/local/projects/wsgsim/log/simoms/logs/socketDaemon.log &
		sleep 60
	fi
###
# process the normal queues
#
	if [ "$Q02" = "on" ]; then
		pid=`ps -ef | grep java | grep q02 | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue Q02 is already running (PID: $pid)"
		else
			echo "Starting Queue Q02..."
			nohup java AsyncOut q02 > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
die beiden ersten prozesse sind wie man sieht php, dann folgt ein java-prozess (die weiteren hab ich aus grund der übersichtlichkeit weggelassen).

nun mein problem: das skript läuft fehlerfrei druch, aber irgendwie sind nach dem ablauf nur die beiden php-prozesse sichtbar - von den javaprozessen keine spur. und laufen tun die auch nicht (ich kann sie nicht ansprechen, und mit ps -ef find ich sie auch nicht).
was mache ich hier falsch??

vielen dank für eure hilfe!
 
jawoll, die ist auf on. da kann ich meine hand ins feuer legen:-)
 
und was gibt das script auf der console aus? da stehen ja ein paar echo's drin, z.b. echo "Queue Q02 is already running (PID: $pid)"
 
eigentlich alles genau was es soll.
wenn ich das skript mit einer zweiten konsole verfolge, und in diesem die prozesse laufend abfrage, dann macht er alles schön. er startet beide php-prozesse, dann beginnt er mit den java-prozessen, doch diese bleiben dann nicht permanent.

wenn ich die php-prozesse nicht starte, bleiben auch die java-prozesse permanent. und noch was: wenn ich das skript ein zweites mal starte, dann müssen ja die php-prozesse nicht mehr gestartet werden, und die java-prozesse bleiben auch permanent...
komisch...

vielleicht hilft das ganze skript?? ist aber ein moster:

Code:
#! /bin/sh
#
# $Id: wsgt-menu.sh, v 2.0 2005/12/23 17:11:11 itpdupa1 Exp $
#
# non-interactive start of WSGT
# reads wsgt.conf and starts or stops all processes accordingly
#
# check for deployment:
# - variable instance
# - variable wsgtdir
#
########################################################################


start_configured () {
### 
# start wsconsumer-Service anyway (check if running, if no, start it)
#
	pida=`ps -ef | grep php | grep wsconsumer | awk '{print $1}'`
	if [ "$pida" != "" ]; then
		echo "Service wsconsumer.php is already running (PID: $pida)"
	else
		echo "wsconsumer-Service is not running, i'm starting it..."
		cd /usr/local/projects/wsgsim/prod/simoms/appl/html/soap/app
		nohup php wsconsumer.php > /usr/local/projects/wsgsim/log/simoms/logs/wsconsumer.log &
	fi
###	
# start socketDaemon-Service anyway (check if running, if no, start it)
#
	pidb=`ps -ef | grep php | grep socketDaemon | awk '{print $1}'`
	if [ "$pidb" != "" ]; then
		echo "Service socketDaemon.php is already running (PID: $pidb)"
	else
		echo "socketDaemon-Service is not running, i'm starting it..."
		cd /usr/local/projects/wsgsim/prod/simoms/appl/dispatcher/app
		nohup php socketDaemon.php > /usr/local/projects/wsgsim/log/simoms/logs/socketDaemon.log &
	fi
###
# process the normal queues
#
	if [ "$Q02" = "on" ]; then
		pid=`ps -ef | grep java | grep q02 | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue Q02 is already running (PID: $pid)"
		else
			echo "Starting Queue Q02..."
			nohup java AsyncOut q02 > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$Q10" = "on" ]; then
		pid=`ps -ef | grep java | grep q10 | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue Q10 is already running (PID: $pid)"
		else
			echo "Starting Queue Q10..."
			nohup java SyncIn q10 > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$Q28" = "on" ]; then
		pid=`ps -ef | grep java | grep q28 | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue Q28 is already running (PID: $pid)"
		else
			echo "Starting Queue Q28..."
			nohup java AsyncIn q28 > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$QMPM" = "on" ]; then
		pid=`ps -ef | grep java | grep qmpm | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue QMPM is already started (PID: $pid)"
		else
			echo "Starting Queue QMPM..."
			nohup java AsyncOut qmpm > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$QNIB" = "on" ]; then
		pid=`ps -ef | grep java | grep qnib | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue QNIB is already started (PID: $pid)"
		else
			echo "Starting Queue QNIB..."
			nohup java SyncIn qnib > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$QXMB" = "on" ]; then
		pid=`ps -ef | grep java | grep qxmb | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue QXMB is already started (PID: $pid)"
		else
			echo "Starting Queue QXMB..."
			nohup java AsyncIn qxmb > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
	if [ "$SPT" = "on" ]; then
		pid=`ps -ef | grep java | grep spt | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue SPT is already started (PID: $pid)"
		else
			echo "Starting Queue SPT..."
			nohup java SyncOut spt > /usr/local/projects/wsgsim/log/simoms/logs/queues.log &
		fi
	fi
}

stop_all (){
	ps=bin/ps
	awk=bin/awk
	for queue in q02 q28 q10 qnib qmpm qxmb spt
	do
		pid=`ps -ef | grep java | grep $queue | awk '{print $1}'`
		if [ "$pid" != "" ]; then
			echo "Queue $queue with PID $pid is being shutdown..."
			kill $pid
		fi
	done
}

#################
# start of script
#################

#+++++++++++++++++++++++++++++++++++
#++ CHECK $instance and $wsgtdir +++
#+++++++++++++++++++++++++++++++++++
instance=simoms
#instance=sime2e
# set start directory with absolute path first:
wsgtdir=/usr/local/projects/wsgsim/prod/$instance/appl/if/mq/if-mq/bin/


# read current status
. $wsgtdir/conf/wsgt.conf

# set Java CLASSPATH
. $wsgtdir/conf/set_classpath_jdk_1_4.profile

case "$1" in
    start)
		echo "Starting MQ/DINO adaptors of instance $instance"
		start_configured
		;;
    stop)
		echo "Shutting down all MQ/DINO adaptors of instance $instance:"
		stop_all
		;;
    *)
       echo "Usage: $0 {start|stop}"
       exit 1
       ;;
esac

exit
 
Zuletzt bearbeitet:
steht im log file (/usr/local/projects/wsgsim/log/simoms/logs/queues.log) irgendwas drin?
 
nein, das hat er nicht angelegt - dieses sehe ich nicht, obwohl der pfad schon korrekt ist.
ich muss auch noch sagen, dass ich die java-progis einzeln getestet habe, diese laufen ohne fehler.
 
und wenn du die ganzen nohup's weglässt, gehts dann?
 
was mir ich mir noch vorstellen könnte: die programme werden ja alle im hintergrund und damit fast gleichzeitig gestartet. vielleicht verkraftet das system oder die programme das nicht. bau mal nach jedem programm start eine verzögerung (sleep 5 oder so) ein und test's dann
 
das hab ich mir auch schon gedacht...
die java-prozesse ohne die php's machen keine probleme (getestet), erst wenn die php-prozesse dazukommen gehts nimmer.

ich hab nach jedem php-prozess schon gewartet - bis 60 sekunden, doch es hat nix gebracht. leider.
 
du hast gesagt du hast alle programme schon einzeln getestet. heisst das du startest ein programm, es funktioniert, du beendest das programm, du startest das 2. programm etc. ?
 
ja, hab ich.
die programme sind alles listener oder poller, also ich MUSS sie beenden, wenn ich nicht will, dass sie ständig im laufen.
und nochmal ja, das programm läuft, ich beende es, starte das zweite, beende es, starte das dritte etc. ich habe aber auch schon alle java-programme gleichzeitig laufen gehabt das geht. es gehen auch die php UND java-programme. einfach nicht aus meinem skript raus...
 
fuexli schrieb:
das hab ich mir auch schon gedacht...
die java-prozesse ohne die php's machen keine probleme (getestet), erst wenn die php-prozesse dazukommen gehts nimmer.

ich hab nach jedem php-prozess schon gewartet - bis 60 sekunden, doch es hat nix gebracht. leider.

Hallo
Du könntest versuchen mal ein strace davor zu setzen, und den Prozess nicht im Hintergrund starten.
Eventuell gibt die Ausgabe Aufschluss was da passiert.

Gruß Wolfgang
 
hmm... mein unix kenn kein strace. (not found) und leider hab ich keine root-rechte um es ihm beizubringen.
 
aber du könntest trotzdem mal, so wie wolfgang_1 schon gesagt hat, alle programme gleichzeit im vordergrund starten, ohne nohup und ohne abschliessendes &, jedes in einer eigenen shell. mal sehen ob das geht und welche meldungen am schirm kommen

Edit: oder auch die php programme so wie bisher im hintergrund und nur das java programm im vordergrund, dann brauchst du nur das script ein bisschen anpassen
 
Zuletzt bearbeitet:
ok, hat etwas gedauert, aber ich habs geschafft. hat alles wunderbar funktionniert. es liegt also definitiv am skript.


ICH HAB NUN DIE LÖSUNG!!!:
Es war ein Pfad-Problem. Der ist nicht mehr zurückgegangen nachdem er die Logs hätte anlegen sollen. Irgendwie hat er dann im Log-Verzeichnis nach den weiteren Dateien gesucht, diese nicht gefunden, und was ich ja ne frechheit find: nichts gesagt!

aber jetzt tuts... herzlichen dank an niguno und wolfgang_1 für eure unterstützung in dieser dunklen stunde:-)!
 
Zuletzt bearbeitet:

Ähnliche Themen

Timeout für Long Time Querys

Queue für copy Script

Autostart von X mit google-chrome durch systemd

Shellskript - Fehler in Cron

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Zurück
Oben