Cron Job Problem

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Cron Job Problem

Beitrag von bkxxl » 07.09.2005 21:45:48

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.

ohulan
Beiträge: 111
Registriert: 21.02.2002 01:00:58

Beitrag von ohulan » 08.09.2005 01:59:42

funktioniert denn das script, das cron startet, wenn du es manuell in der konsole startest? falls ja, vll starten die prozesse nicht, weil es als anderer user gestartet wird und z.b. umgebungsvariablen nicht stimmen?

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 08.09.2005 09:13:42

Jo, denke auch dass du eher mal deine Skripten checken solltest. Cron hat da sicher keine Schuld.

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 09:24:42

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:

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
Der Befehl ganz unten ist zum ausführen der Datei, die wir zum starten, stoppen, neustarten verwenden.


.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

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 09:52:36

welche Berechtigungen haben denn die Dateien ".start" usw. wenn sie hochgeladen worden sind? Und wem gehören sie?

Und wenn du ".run" manuell ausführst, klappt es dann?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 10:00:17

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

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 10:03:51

ich versteh noch nicht ganz was du mit
Jetzt habe ich das Problem, dass der CronJob unter Debian zwar Prozesse killt, diese aber nichtmehr startet.
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?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 10:07:51

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.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 10:09:15

ist ja logisch

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 
ihr lasst in diesem Skript ja auch erst starten ".start" und sofort wieder beenden ".start1"

oder hast du nur nen Dreher gehabt?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 10:10:57

jo sry. Mein Fehler war ein dreher. start1 und .start vertauscht also das Erstere beendet, das zweite startet.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 10:25:27

wie sehen denn die beiden Skripte aus?

Also .start scheint zu funktionieren..
.start1 jedoch nicht?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 10:42:35

Es funktionieren beide, wenn ich diese von Hand ausführe.

.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
.start1:

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 &
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.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 10:49:43

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?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 10:59:24

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.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 11:05:13

auch in der ".start" blieb es erfolglos? Ich denke er hat das ausgeführt? Also die Server gekillt?

Ich schätze wenn du

Code: Alles auswählen

/home/AS-442/.run 
manuell ausführst, wird die Datei angelegt, oder?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 11:16:52

ja wie gesagt, wenn ich das ganze von hand ausführe funktioniert es. Es geht auch wenn ich den CronJob per Webmin von Hand ausführe. Aber es geht nicht, wenn er es automatisch machen soll. Das ist eben das komische dabei.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 11:43:39

was sagt dir denn die /var/cron/log dazu? Wurde es überhaupt ausgeführt?

Ansonsten versuch mal den Cronjob beim User direkt einzurichten

Code: Alles auswählen

su - AS-442
crontab -e
und dort dann

Code: Alles auswählen

* * * * * /home/AS-442/.run
(die Leerzeile am Ende nicht vergessen!)


APROPO LEERZEILE.. versuch mal zuallererst eine Leerzeile am Ende der /etc/crontab einzufügen!!!
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 12:06:34

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.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 08.09.2005 12:48:33

hast du Cron mal restartet?

Cron sollte glaub ich in die /var/log/syslog schreiben..

Wieso wird alles gekillt wenn du es als Root laufen lässt? Kann es sein dass irgendeiner der "killall" Befehle das Skript selber auch killt?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

bkxxl
Beiträge: 15
Registriert: 07.09.2005 21:34:49
Kontaktdaten:

Beitrag von bkxxl » 08.09.2005 12:56:48

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:

Code: Alles auswählen

Sep  8 12:22:01 dual /USR/SBIN/CRON[31783]: (AS-442) CMD (/home/AS-442/.run)

Antworten