Cronjob

Snarkoom

Snarkoom

Linux Noob
Hallo Unixboard User,
vorweg, ich habe kein Plan von Cronjobs (Crontabs?)..

So, ich habe einen Chat auf meinem vServer laufen.
Dieser muss jeder Nacht einmal Neugestartet werden, genauso wie MySQL..

Der Chat wird mit dem User " smilechat " gestartet.
Wenn der User eingeloggt ist, wechselt dieser mit " cd bin " in das " bin " Verzeichniss. Nun muss erst der Chat gekillt werden. Dazu muss ersteinmal " ps -x " eingegeben werden, um zu gucken, welche PID der Chat benutzt.
Wenn der Chat gekillt ist, muss im " bin " Verzeichniss " ./sc " ausgeführt werden und der Chat läuft.

Wie kann ich das in einem Cronjob verwirklichen?
Das gleiche mit MySQL. Dort muss ja nur " /etc/init.d/mysql restart " gemacht werden.

Nun, wie geht das?

mfg

Edit: Linux Debian Etch (4.0)
 
Hallo,

das wonach du suchst kommt eher in die Sparte Runlevel da die ja nur während des Systemstarts mitgeladen werden. Crontabs sind eher für Sachen die regelmäßig ( alle 5 Minuten, einmal die Stunde, einmal am Tag usw. ) aufgerufen werden.

Zum Thema Runlevel gugst du hier : http://www.remoteshell-security.com/lintip.php#ta1
 
Code:
mkdir /root/scripts
cd /root/scripts
cat >> chat_restart.sh << "EOF"
#!/bin/bash

# in den Chat-Ordner wechseln, wo die Datei 'sc' liegt. Pfad anpassen!
cd /pfad/zu/deinem/chat/bin-ordner

# prozess aus der prozessliste holen, PID extrahieren und an kill weiterreichen
# "gesuchter-prozessname" anpassen!
kill `ps ax | grep "gesuchter-prozessname" | awk '{print $1}'`

# chat starten
./sc

# MySQL neustarten
/etc/init.d/mysql restart
EOF
chmod +x /root/scripts/chat_restart.sh

Danach noch folgende Zeile in die /etc/crontab um den Chat und die MySQL um 2:00 Uhr morgens neuzustarten.

Code:
0 2 * * * root /root/scripts/chat_restart.sh

Das sollte eigentlich dann deinen Zweck erfüllen. Ich an deiner Stelle würde mir aber mal einen Kopf darum machen wieso deine MySQL diese Restarts braucht. Normal ist so ein Verhalten des MySQL-Servers ja nun nicht.

Wichtig: "gesuchter-prozessname" muss so eindeutig sein, dass du nicht aus Versehen einen anderen Prozess erwischst. Ein "sc" z.B. wäre ziemlich unsicher. Eindeutiger wäre dann ein "./sc". Schau halt wie ein Eintrag des Chat-Prozesses in der Prozessliste aussieht und verwende dann einen möglichst eindeutigen String.
 
Danke, sehr nice! :)
Werde ich mir heute Mittag mal angucken :)

Edit: Geht das auch, das der Chat mit dem User " smilechat " gestartet wird?
Root is mir n bissel unsicher..
 
Einfach ein 'sudo -u smilechat ./sc' anstelle des './sc' im Skript verwenden.
 
Danke nochmal, habe jetzt mal alles eingebunden, und das Script so ausprobiert.
Funktioniert wunderbar! :)

Nun nur noch gucken, ob mit der Crontab klappt, werde mich morgen früh nochmal melden.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Nabend nochmal, hab da noch eine Frage, wie mache ich das jetzt, das sich der Chat beim Starten des Servers startet? (wenn der mal abstürzen sollte).

Wenn mir das auch noch jemand machen könnte wäre das sehr nice, dann hab ich 2 Sachen an die ich mich bei anderen Programmen halten kann.

mfg
 
Zuletzt bearbeitet:
Code:
cd /etc/init.d
cat >> chat.sh << "EOF"
#!/bin/bash

case "$1" in
start)
  cd /pfad/zu/deinem/chat/bin-ordner
  ./sc
  ;;
stop)
  kill `ps ax | grep "gesuchter-prozessname" | awk '{print $1}'`
  ;;
*)
  echo "Usage: `basename $0` {start|stop}" >&2
  exit 64
  ;;
esac

exit 0
EOF
chmod +x /etc/init.d/chat
update-rc.d chat defaults
Die gleichen Anpassungen wie oben vornehmen und dein Chat wird zukünftig beim Server-Reboot mitgestartet.

Wenn allerdings nur der Chat abstürzt, wirst du ihn selbst wieder neustarten müssen. Alternativ bastelst du dir einen Watchdog, der via Cron regelmässig in der Prozessliste nachschaut ob der Prozess noch da ist und wenn er ihn nicht findet diesen neustartet. Dafür wirst du allerdings mal selbst deinen Kopf anstrengen müssen. Die notwendigen Grundlagen sind ja schon in chat_restart.sh enthalten.
 
Zurück
Oben