Script funktioniert nicht, wenn als CRONJOB ausgeführt

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
Pendevil
Beiträge: 24
Registriert: 23.06.2007 21:55:02
Lizenz eigener Beiträge: GNU Free Documentation License

Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von Pendevil » 11.02.2011 22:03:17

Hallo Debian-Forum,
ich verwende Debian 5.0.8 Lenny auf meinem vServer.

ich will nun mit regelmäßigen Aufrufen eines Scripts testen, ob ein SCREEN-Prozess noch läuft, und falls nicht, soll das Script den SCREEN-Prozess detached neustarten.

Hier das Script (./sim):

Code: Alles auswählen

#!/bin/bash
PATH=$PATH:/bin:/usr/bin

#change from 'ps ax' to 'screen -ls' 
#in the following line by Jeremy Freeman
SIMSCREEN=$(screen -ls | pgrep mono | wc -l)
cd /home/hgridsim/OpenSim/bin

if [ $SIMSCREEN = 0 ] ;
then 
    echo "Starting screen and OpenSim.exe (detached)"
    date
    sleep 2
    screen -d -m -S OpenSim mono OpenSim.exe
else
    if [ "$1" = "attach" ] ;
    then
        echo "Attaching to OpenSim.exe"
        sleep 2
        screen -d -r OpenSim
   fi
fi
##############################
Das Skript funktioniert genau so, wie es soll.
(1) Wird es aufgerufen und es läuft kein SCREEN-Prozess "OpenSim", startet das Script den SCREEN und im SCREEN den OpenSim-Server mit "mono".
(2)Wird das Script mit dem Parameter "attach" aufgerufen ("./sim attach") und SCREEN läuft, wird SCREEN in den Vordergrund geholt, und ich kann den OpenSim-Server bedienen.
Sollte SCREEN nicht laufen, wird es detached gestartet.
(3) Wird das Script ohne Parameter aufgerufen und SCREEN läuft, macht das Script gar nix.

Alles genau wie es soll.
Starte ich dieses Script aber alle 2 Minuten per cronjob (nicht als root, sondern als user), reagiert das Script eigenartig.
Hier meine CRONTAB:

Code: Alles auswählen

*/2 * * * * /bin/bash /home/hgridsim/sim >> /home/hgridsim/sim.log

Das eigenartige ist: Die Ausgaben des Scriptes ./sim werden in die Logdatei "sim.log" eingetragen.
Also "Starting screen and OpenSim.exe (detached)" und darunter das Datum, wann SCREEN neugestartet wurde.

Aber der neugestartete SCREEN-Prozess wird nach kurzer Zeit wieder beendet (ein paar Sekunden).

Woran kann das liegen und was mache ich, um dieses Problem zu lösen?

Vielen Dank,
Daniel
Wenn Windows die Antwort ist, dann war's 'ne dumme Frage!

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von syssi » 11.02.2011 22:36:13

Es ist moeglich, dass die von Screen gestartete Subshell wieder im HOME beginnt und sich deshalb nicht um dein aktuelles Verzeichnis kuemmert. Wie waere es mit:

Code: Alles auswählen

...
screen -d -m -S OpenSim mono /home/hgridsim/OpenSim/bin/OpenSim.exe
...
Gruss syssi

Benutzeravatar
Pendevil
Beiträge: 24
Registriert: 23.06.2007 21:55:02
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von Pendevil » 12.02.2011 03:47:07

Hallo syssi,

hab deinen Vorschlag ausprobiert, ohne Erfolg, aber ich glaube, dass es mit den Pfaden irgendwie zusammenhängt, denn wenn ich das Script in deiner Weise verändere (absolute Pfade), reagiert das Script genauso, als würde es als cronjob ausgeführt. Es funktioniert also auch bei direktem Aufruf nicht mehr. Raff ich nicht, aber ist so...

Was kann ich sonst noch probieren?
Wenn Windows die Antwort ist, dann war's 'ne dumme Frage!

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von syssi » 12.02.2011 09:16:47

Man könnte noch versuchen:

Code: Alles auswählen

creen -d -m -S OpenSim "cd /home/hgridsim/OpenSim/bin && mono OpenSim.exe"

Benutzeravatar
whisper
Beiträge: 3388
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von whisper » 12.02.2011 10:29:54

Debug Hilfe einbauen, indem du jede Zeile mit Variablen doppelst und ein echo davor machst und es in eine log datei schreibst.
z.b.

Code: Alles auswählen

echo " :DBG1:SIMSCREEN=$(screen -ls | pgrep mono | wc -l)" >>/home/hgridsim/sim.log
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
Pendevil
Beiträge: 24
Registriert: 23.06.2007 21:55:02
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Script funktioniert nicht, wenn als CRONJOB ausgeführt

Beitrag von Pendevil » 12.02.2011 17:45:24

Hallo,

vielen Dank für eure Hilfe. Das Script-Debugging bringt mir aber leider keine neuen Erkenntnisse und auch syssis Versuch ändert nichts. Das Script wird mit CRON nicht gestartet.

Jemand im osgrid.org Forum hat mich jetzt dazu überzeugt, den Dienst mit Monit zu starten/stoppen und zu überwachen. Das werde ich heute Abend erst mal versuchen.

Gruß,
Daniel

EDIT: Also: ich habe auf Monit umgestellt und damit läufts einwandfrei.
Eigentlich ist das ja schon seltsam mit CRON, aber für mich ist das Problem gelöst.
Trotzdem Danke!
Wenn Windows die Antwort ist, dann war's 'ne dumme Frage!

Antworten