Cron Job Problem
Cron Job Problem
Ich habe folgendes Problem. Wir haben ein Interface programmiert, welches verschiedene Anwendungen u.a. auch Gameserver wie folgt startet:
Das PHP Script legt per FTP Dateien an, die über einen Cronjob auf den Server selber ausgeführt werden sollen. Jetzt habe ich das Problem, dass der CronJob unter Debian zwar Prozesse killt, diese aber nichtmehr startet.
Ich habe schon verschiedene dinge Probiert, die Cron Jobs per Webmin angelegt, die Cron Jobs direkt in der crontab Datei eingetragen, Cron neuinstalliert, aber das hat alles nicht den gewünschten Erfolg gebracht.
Vielleicht kann mir ja hier jemand bei den Problem weiterhelfen.
Das PHP Script legt per FTP Dateien an, die über einen Cronjob auf den Server selber ausgeführt werden sollen. Jetzt habe ich das Problem, dass der CronJob unter Debian zwar Prozesse killt, diese aber nichtmehr startet.
Ich habe schon verschiedene dinge Probiert, die Cron Jobs per Webmin angelegt, die Cron Jobs direkt in der crontab Datei eingetragen, Cron neuinstalliert, aber das hat alles nicht den gewünschten Erfolg gebracht.
Vielleicht kann mir ja hier jemand bei den Problem weiterhelfen.
Also wir haben das Script schon unter Gentoo und SuSe getestet, da funktioniert es einwandfrei, nur auf Debian macht es Probleme. Kann es sein, dass der Cron nicht berechtigt ist, Prozesse zu starten? oder, dass ich erst die User Flags für FTP User einstellen muss, da die Dateien von einen FTP User gestartet werden sollen (Habe aber auch schon probiert den User als bash oder sh an zu legen).
crontab:
Der Befehl ganz unten ist zum ausführen der Datei, die wir zum starten, stoppen, neustarten verwenden.
.run Datei:
crontab:
Code: Alles auswählen
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#
* * * * * AS-442 /home/AS-442/.run
.run Datei:
Code: Alles auswählen
#!/bin/bash
if test -f /home/AS-442/.start ; then
chmod 755 /home/AS-442/.start
/home/AS-442/.start
rm /home/AS-442/.start
fi
if test -f /home/AS-442/.start1 ; then
chmod 755 /home/AS-442/.start1
/home/AS-442/.start1
rm /home/AS-442/.start1
fi
Also die Dateien werden über den selben User hochgeladen, wie diese auch ausgeführt werden. Daher sind es die gleichen User.
Die Dateien haben folgende Rechte nach den anlegen vom Script:
4 -rw-r--r-- 1 AS-442 users 2552 Sep 8 09:59 .start1
4 -rw-r--r-- 1 AS-442 users 1984 Sep 8 09:59 .start
Wenn ich den Cron von Hand ausführe, dann funktioniert der neustart problemlos. Nur wenn er automatisch ausgeführt werden soll, macht er Probleme
Die Dateien haben folgende Rechte nach den anlegen vom Script:
4 -rw-r--r-- 1 AS-442 users 2552 Sep 8 09:59 .start1
4 -rw-r--r-- 1 AS-442 users 1984 Sep 8 09:59 .start
Wenn ich den Cron von Hand ausführe, dann funktioniert der neustart problemlos. Nur wenn er automatisch ausgeführt werden soll, macht er Probleme
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
ich versteh noch nicht ganz was du mit
Inwiefern killt er denn Prozesse? Dein Cronjob startet ein Skript.. mehr nicht.. wo bleibt er denn hängen? Macht er gar nichts? Kriegst du Fehlermeldungen per Mail oder im Cronlog?Jetzt habe ich das Problem, dass der CronJob unter Debian zwar Prozesse killt, diese aber nichtmehr startet.
also in der ersten Datei. .start1 beendet der Cron jeden Prozess, des unter diesen User gestarteten Servers. In der Datei .start startet er die Prozesse oder den Prozess wieder. Daher killt im Moment der CronJob lediglich den Prozess, startet ihn aber nicht. Eine Fehlermeldung spukt die syslog nicht aus. Eine cronlog ist nicht vorhanden.
Zuletzt geändert von bkxxl am 08.09.2005 10:10:18, insgesamt 1-mal geändert.
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
ist ja logisch
ihr lasst in diesem Skript ja auch erst starten ".start" und sofort wieder beenden ".start1"
oder hast du nur nen Dreher gehabt?
Code: Alles auswählen
#!/bin/bash
if test -f /home/AS-442/.start ; then
chmod 755 /home/AS-442/.start
/home/AS-442/.start
rm /home/AS-442/.start
fi
if test -f /home/AS-442/.start1 ; then
chmod 755 /home/AS-442/.start1
/home/AS-442/.start1
rm /home/AS-442/.start1
fi
oder hast du nur nen Dreher gehabt?
Es funktionieren beide, wenn ich diese von Hand ausführe.
.start:
.start1:
Das ganze geht danacht, dass er schaut, welcher Ordner vorhanden ist, dann in den Ordner geht und die Datei "start" zum starten des Servers ausführt.
.start:
Code: Alles auswählen
#!/bin/bash
killall bf1942_lnxded
killall bfsmd
killall bfv_linded
killall bf2_f
killall etded.x86
killall hlds_run
killall hlds_i486
killall hlds_i686
killall hlds_amd
killall hlds_amd64
killall hltv
killall hltv_run
killall q3ded
killall jk2ded
killall wolfded.x86
killall sof2ded
killall ucc-bin
killall srcds_amd
killall srcds_i686
killall spearhead_lnxded
killall srcds_i486
killall doom3-dedicated
killall spearhead_lnxde
killall doomded.x86
killall srcds_i486
killall pkserver
killall mohaa_lnxded
killall srcds_run
killall linuxjampded
killall cod_lnxded
killall coduo_lnxded
killall server-bin
killall renegade
killall renegade_server
Code: Alles auswählen
#!/bin/bash
cd /home/AS-442/bf1942/
cd /home/AS-442/bf/
cd /home/AS-442/bfv/
cd /home/AS-442/bf2/
cd /home/AS-442/wolfet/
cd /home/AS-442/hlds/
cd /home/AS-442/hltv
cd /home/AS-442/q3a/
cd /home/AS-442/et/
cd /home/AS-442/sof2/
cd /home/AS-442/rtcw/
cd /home/AS-442/to/
cd /home/AS-442/ut/
cd /home/AS-442/ut2003/
cd /home/AS-442/ut2004/
cd /home/AS-442/ut2004/System/
cd /home/AS-442/jk2/
cd /home/AS-442/jk3/
cd /home/AS-442/aao/
cd /home/AS-442/cod/
cd /home/AS-442/coduo/
cd /home/AS-442/hl2mp/
cd /home/AS-442/hlds-r/
cd /home/AS-442/mohaa/
cd /home/AS-442/renegade/
cd /home/AS-442/hlds/
cd /home/AS-442/hlds/hltv
cd /home/AS-442/hl2/
cd /home/AS-442/pkserver/
cd /home/AS-442/et319/
cd /home/AS-442/et310/
cd /home/AS-442/et320/
cd /home/AS-442/doom3/
cd /home/AS-442/renegade/start
rm -f screenlog*
rm -r /home/AS-442/.callofduty/main/config_mp_server.cfg
rm -r /home/AS-442/.doom3/base/doomconfig.cfg
rm -r /home/AS-442/.doom3/base/DoomConfig.cfg
./start >screenlog.0 2&>screenlog &
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
den Sinn genau warum du all diese "cd /XX/XX" drin hast, versteh ich nicht.. sollte es einen n icht geben, kriegst es das Skript das zwar mit, ignoriert es doch aber völlig!
wenn du da mal per "touch /tmp/testdatei" eine Datei anlegen lässt (so mittendrin im Skript) wird diese dann angelegt oder nicht?
wenn du da mal per "touch /tmp/testdatei" eine Datei anlegen lässt (so mittendrin im Skript) wird diese dann angelegt oder nicht?
Das Prinzip ist ganz einfach. Es ist nur ein Ordner dieser ganzen Liste vorhanden, da man aber je nach dem, welches Game installed ist einen anderen Ordner benötigt, sind alle aufgelistet. Wenn das Script also in einen Ordner nicht gehen kann, so geht er automatisch zum nächsten, bis er einen findet, der vorhanden ist und dort führt er dann die start Datei aus.
Folgendes habe ich in der Datei .start1 eingetragen:
touch /home/AS-442/testdatei
Eine Datei hat er nicht angelegt
Ich habe es auch mit der Datei .start getestet, dies blieb aber auch erfolglos.
Folgendes habe ich in der Datei .start1 eingetragen:
touch /home/AS-442/testdatei
Eine Datei hat er nicht angelegt
Ich habe es auch mit der Datei .start getestet, dies blieb aber auch erfolglos.
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
auch in der ".start" blieb es erfolglos? Ich denke er hat das ausgeführt? Also die Server gekillt?
Ich schätze wenn du manuell ausführst, wird die Datei angelegt, oder?
Ich schätze wenn du
Code: Alles auswählen
/home/AS-442/.run
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
was sagt dir denn die /var/cron/log dazu? Wurde es überhaupt ausgeführt?
Ansonsten versuch mal den Cronjob beim User direkt einzurichten
und dort dann
(die Leerzeile am Ende nicht vergessen!)
APROPO LEERZEILE.. versuch mal zuallererst eine Leerzeile am Ende der /etc/crontab einzufügen!!!
Ansonsten versuch mal den Cronjob beim User direkt einzurichten
Code: Alles auswählen
su - AS-442
crontab -e
Code: Alles auswählen
* * * * * /home/AS-442/.run
APROPO LEERZEILE.. versuch mal zuallererst eine Leerzeile am Ende der /etc/crontab einzufügen!!!
Das einfügen einer Leerzeile am Ende der Crontab hat leider nicht den gewünschten Erfolg gebracht.
Der Eintrag über crontab -e funktioniert leider auch nicht richtig. Das komisch was ich nur finde ist, dass der Server gekillt wird, und die angelegten Dateien entfernt werden. Achja der Cron darf nicht als root ausgeführt werden, da sonst alles gekillt wird.
Eine Cron Log wird vom Server nicht erstellt.
Der Eintrag über crontab -e funktioniert leider auch nicht richtig. Das komisch was ich nur finde ist, dass der Server gekillt wird, und die angelegten Dateien entfernt werden. Achja der Cron darf nicht als root ausgeführt werden, da sonst alles gekillt wird.
Eine Cron Log wird vom Server nicht erstellt.
Das ist userabhängig. Das Script arbeitet ja mit killall befehlen. Daher wir wenn noch andere Server laufen als root alle Server gekillt.
Den Cron hab ich bestimmt schon 10x restarted.
Ja in der Syslog bin ich fündig geworden, aber kein konkreter Fehler.
Immer nur:
Den Cron hab ich bestimmt schon 10x restarted.
Ja in der Syslog bin ich fündig geworden, aber kein konkreter Fehler.
Immer nur:
Code: Alles auswählen
Sep 8 12:22:01 dual /USR/SBIN/CRON[31783]: (AS-442) CMD (/home/AS-442/.run)