Wie überwache ich einen Prozess - als ob er läuft ?

scars

Neuer User
Mitglied seit
24 Dez 2006
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich stecke gerade erst in den Anfängen, mich mit Linux intensiver zu beschäftigen, deshalb bräuchte ich ein paar erfahrene User die mir etwas unter die Arme greifen könnten.

Ich habe auf der FB 7170 einen Cardserver laufen (MPCS), dieser stürzt leider unregelmäßig ab und beendet sich selbst, so alle 4-7 Tage, was etwas nervig ist da ich ihn dann immer manuell starten muss. :(

Deshalb zu meiner Frage, wie kann ich diesen Prozess überwachen ob er läuft, und ggf. neu starten ?

Ich habe diese Zeile in einem anderen Forum gefunden, die das ermöglichen soll, aber ich versteh das nicht so ganz und weiß auch nicht wo ich das nun eingeben müsste :

* * * * * ps w | grep /usr/bin/mpcs | grep -v grep || /etc/init.d/rc.mpcs start

Danke schonmal für eure Hilfe :)
 
Diese Zeile ist ein Cron Job also so ähnlich wie bei Windows der Taskplaner, so wie in dieser Zeile "eingestellt" guckt grep (ein Such-Utility) jede Minute in der Prozessliste (Befehl ps) nach, ob "/usr/bin/mpcs" darin vorkommt, wenn nicht, wird "/etc/init.d/rc.mpcs start" ausgeführt.
 
Zuletzt bearbeitet:
Hallo cssoft,

danke für die erklärung, dein tipp mit dem "cronjob" war gold wert, hab es jetzt erfolgreich einbauen können, wenn ich einen absturz herbei führe startet das Programm innerhalb von einer minute autom. neu - klasse

(den intervall verkürzen kann man wohl nicht mehr, oder ?)


Kann ich so im DS Mod bzw in der crontab auch festlegen dass die Box zu einer bestimmten uhrzeit automatisch neu startet ?
 
Natürlich,

wenn du zum Bsp. die Box immer um 04:30 Uhr morgens neustarten möchtest, gibst du folgendes ein:
Code:
30 4 * * * /sbin/reboot
 
Perfect, Danke!
 
Man kann auch einen Job erzeugen, der theoretisch mit einer kürzeren Pollingzeit auskommt (das kostet natürlich dann mehr CPU), indem man "kill -0" bzw. aus C/C++ heraus kill() mit PID und Signal 0 aufruft. Dadurch erhält man nur den Status eines Prozesses.

Eine andere Option besteht darin, einen Prozess als Unterprozess eines andere Prozesses zu starten und dann auf das asynchrone Signal einer Child Process Beendung zu warten, wenn diese eintritt. Man kann dann den Prozess neu starten.

"kill -0" mit Standardmitteln kann Dir in einer Schleife eine Auflösung von weniger als einer Minute geben. Die zweite Option erfordert ein speziell compiliertes Programm.

--gandalf.
 
oder man macht es einfach so:
Code:
#!/bin/bash

case "$1" in
    start)
      /bin/bash -c '\
      while [ 1 == 1 ]; do \
      sleep 2
      cd /cardserver/mpcs
      ./mpcs -c /cardserver/mpcs \;
      done \' &
      ;;

    stop)
      ;;

    restart)
      killall -9 mpcs
      ;;

      *)
      echo "Usage: $N (start|restart)" >&2
      exit 1
      ;;
esac

exit 0


gruß
tom

p.s. so habe ich es schon seit jahren am laufen
 
Statt "[ 1 == 1 ]" könnte man "true" schreiben ;-) Das empfiehlt sich allerdings nur für leichtgewichtige Executables, denn sonst ist der Start des Programms relativ viel CPU-Last alle paar Sekunden.

Für schwerere Executables kann man die PID des gestarteten Prozesses in eine Datei oder Variable $PROCID schreiben und dann weiter mit "kill -0 $PROCID" testen, bevor man den Prozess versucht neu zu starten.

--gandalf.
 
Hallo Satbandit und gandalf,

wo muss ich denn dieses script hinmachen und wie sorge ich dafür dass es läuft ?

danke :)
 
Am besten nach /var/flash und eintrag in die debug.cfg (ebenfalls in /var/flash) damit dies nach reboot / an-, ausschalten noch da ist.

Oder: Wenn du DS-Mod verwendest direkt ins Root Verzeichnis

Oder: Per wget von einem lokalen oder Online Server runterladen lassen und ausführen.
 
Hallo cssoft,

bei mögl. 1 )

Wie soll der eintrag dann aussehen, einfach : /var/flash/bash" ?

bei mögl. 2 )

ja, ich verwende den DS Mod, das root verzeichnis ist "/", wie muss ich es dann aktivieren, oder startet es da drin dann automatisch ?

danke
 
Da braucht wohl jemand ein paar UNIX-Grundlagen - nicht böse gemeint. Im Gegenteil, das Zeug ist ja auch kryptisch am Anfang, besonders für Windows-Benutzer. Dafür macht es Spaß und kann viel, wenn man ein bißchen mehr darüber weiß. Die Seite fand ich recht gut zum Einstieg: http://www.netzmafia.de/skripten/unix/index.html

(Keine Angst, es wird Dir trotzdem geholfen, aber Du machst es uns leichter, wenn Du ein paar Basics beherrschst. Dann müssen wir nicht jeden Schritt erklären.)
 
Hi kriegaex,

Ich beschäftige mich zwar jetzt mehr mit Linux (Kofflers Linux Buch),aber ich kratz da momentan nur an der Oberfläche ,deshalb bin ich wirklich froh hier Leute zu haben die mir unter die Arme greifen.

:)
 
Ich meinte bei der 2. Mögl. das wenn du DS-Mod verwendest, du es in (irgendeinen) "Binary" Order im Root Verzeichnis nimmst.

Zum Beispiel habe ich ein kleines Script geschrieben, das einen Torrent startet soll und man den Status an den LEDs erkennen kann, dieses habe ich (auf der FBF) im /sbin Ordner drin, sodass ich es einfach so aufrufen kann ohne in irgendwelche Verzeichnisse zu müssen, damit es auch dort hinkommt muss ich jetzt zum Bsp es nach "ds-mod/root/sbin" kopieren.

Also kopier dein Skript einfach nach ds-mod/root/sbin (oder bin, oder usr/bin, usr/sbin), danach ist es auf der FBF im /sbin, oder im /bin, oder im /usr/bin usw. Verzeichnis. Vergiss aber nicht beim DS-Mod erst "chmod +x" auf das Skript anwenden, sonst kannst du es nicht ausführen.

Danach trägst du es einfach in die DEBUG.CFG ein: /bin/meinscript zum Bsp.
 
Tach,

ich hab das von SatBandit gepostete Script jetzt auf meine FB kopiert, allerdings liegts momentan noch im falschen verzeichnis.

Ich bin mit Putty auf die FB verbunden und wenn ich versuch es nach bin;sbin etc zu kopieren bekomm ich jedesmal die selbe Meldung :

cd /var/tmp/bash /bin/
cp: unable to open `/bin/bash': Read-only file system

Fehlen mir da etwa die Zugriffsrechte ?
 
@scars: /lib, /bin, /sbin, /usr sind read-only, um sie zu ändern, muß man eine neue FW flashen. /dev, /proc sind virtuelle Dateisysteme für besondere Zwecke (vereinfacht ausgedrückt), dorthin kopierst Du auch nichts. In /var/flash sind die Einstellungen der Box persistent gespeichert. Wie man die verändert, kannst Du hier im Forum nachlesen. Du kannst Dich unter /var/tmp austoben. Zur Laufzeit etwas nach /bin zu kopieren geht nur virtuell mit einem Overlay-Dateisystem wie mini_fo, ansonsten mußt Du alles, was Du im Read-Only-Bereich haben möchtest, vor dem Flashen ins Firmware-Image packen. Mein Tip für Dich: Lies Dich erst mal im Wiki ein, frag danach. Oder verwende die Suchfunktion. Nicht böse gemeint, viel Spaß beim Entdecken. :)

@xsapling: Wie kommt Deine Frage hier in den Thread? Ein Versehen? Das ist total off-topic.
 
@scars: Einfach dein Skript in root (Unterverz. vom DS-Mod) nach bin kopieren, also ds-mod-0.2.9_26-XX/root/bin dort sollte dein skript rein.

Dann make, auf die Box flashen -->Voila
 
Nur eine Kleinigkeit, die mir gerade aufgefallen ist an obigem Skript. Da wird die bash verwendet, die gibt es aber nicht auf der Fritz!Box. Sollte statt bash nicht eher sh da stehen an beiden Stellen? Ich meine nur, bevor scars flasht und es geht dann nicht.
 
Achso klar, dachte er nimmt nur den Name "bash".
 
brauche mal hilfe

* * * * * ps w | grep /usr/bin/mpcs | grep -v grep || /etc/init.d/rc.mpcs start

kann mir mal jemand sagen was bei den Sternen hinkommt oder muss das so ?

Danke
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.