via php Prozeß abfragen und starten

Status
Für weitere Antworten geschlossen.

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63
Hallo,

ich möchte in einem php-Script über den Webserver einen Prozeß abfragen und starten, falls er nicht läuft.

Mein Problem: Ich habe 0-Ahnung, wie ich das anstelle.

Kann jemand helfen ?

Danke
Struppix
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das dürfte mit einem cgi Script (Shell Script für den Webserver) wesentlich einfacher gehen. Was du zudem nicht vergessen darfst: Je nach Prozess muss dieser von root gestartet werden und das wird mit dem Userwebserver sehr schwierig. Ich würds so machen: Shellscript das prüft und den Prozess falls nötig neustartet und dieses Script dann regelmässig mittels cron aufrufen. Welchen Prozess willst du denn prüfen?
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63
Das dürfte mit einem cgi Script (Shell Script für den Webserver) wesentlich einfacher gehen. Was du zudem nicht vergessen darfst: Je nach Prozess muss dieser von root gestartet werden und das wird mit dem Userwebserver sehr schwierig. Ich würds so machen: Shellscript das prüft und den Prozess falls nötig neustartet und dieses Script dann regelmässig mittels cron aufrufen. Welchen Prozess willst du denn prüfen?


Wenn ich das hier sage, gibt es wieder "Schimpfe".
Das mit dem Shellscript ist ne gute Idee. Das könnte ich dann ja immer per php anstoßen, oder ? Nur weiß ich halt dennoch nicht, wie nun das script aussehen müßte.

Per cron mag finde ich nicht so toll, da es ja nur wirklich laufen sollte, wenn's gebraucht wird.

Struppix
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@merthos
Je nach Prozess der da angeworfen wird würde ich das nicht via Webserver (sprich von aussen erreichbar) machen.

@struppix
was hast du gegen cron? Hat der Lümmel dich mal gebissen? ;-)
Btw: Wie willst du ohne regelmässige Prüfung denn rausfinden ob du den Prozess (re)starten musst?
 

hansi

Benutzer
Mitglied seit
22. Feb 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
6
Ich hab sowas mal vor längerer Zeit über einen kleinen Perl-Daemon gelöst. Ein PHP-Script hat dann einen Port connected und entsprechende Befehle gesendet, die dann das richtige Script gestartet haben. Allerdings war das auch eine Umgebung wo Sicherheit keine Rolle gespielt hat.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63
Warum immer PHP, der Webserver kann auch andere Skripte ausführen.

CGI: http://www.synology-forum.de/showthread.html?19244-Shell-Workshop-(12)
Skript:
Rich (BBCode):
#!/bin/sh
ps | grep -v "grep NAME" | grep "NAME" || /PFAD/NAME

Vielen Dank für den Hinweis: Das habe ich ja noch gar nicht gesehen. Zugegeben, die Geschichte mit den cgi Skripten sieht wirklich interessant aus, wenn es nicht soooo kompliziert wäre, für Amateure wie mich.
Im Übrigen mal ein Lob an Itari: Das ist selbst für mich verständlich. und glaubt mir, das soll was heißen .... :eek:


@merthos
Je nach Prozess der da angeworfen wird würde ich das nicht via Webserver (sprich von aussen erreichbar) machen.

@struppix
was hast du gegen cron? Hat der Lümmel dich mal gebissen? ;-)
Btw: Wie willst du ohne regelmässige Prüfung denn rausfinden ob du den Prozess (re)starten musst?

Nee, cron hat mich nicht gebissen. Ich wollte aber den Prozeß nur dann abfagen, wenn ich halt eine neue Eingabe für ihn habe. Ansonsten müßte ich ihn ja ständig abfragen, macht das Sinn.

Aber mal im Ernst, brauche ich nicht für cron auch ein Skript. Und genau daran scheiterts im Moment. Ich bin halt eher der mit dem Schraubenzieher, oder -dreher wenn Ihr so wollt. :D

Struppix
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Und nun mach deinen Prozess mal aus und führe das Skipt nochmal aus. Ist alles schon drin, der zweite Teil ("|| /PFAD/NAME") wird ausgeführt, wenn nichts gefunden wird.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Je nachdem was für ein Prozess es ist reicht ein einfaches ps wohl kaum z.B. nur weil der httpd gemäss ps läuft heisst das noch lange nicht, dass er auch wirklich Webseiten ausliefert. Da müsste man je nach Prozess noch detaillierter prüfen
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63
Und nun mach deinen Prozess mal aus und führe das Skipt nochmal aus. Ist alles schon drin, der zweite Teil ("|| /PFAD/NAME") wird ausgeführt, wenn nichts gefunden wird.

Also, die Abfrage funktioniert perfekt.
Ich habe mir mal ein cgi gebastelt, wie es Itari beschreibt, um es zu testen. Auch das Starten geht, aber ...

Der Prozeß wird leider nicht neu gestartet. Dies ist im Webbrowser so.


Das Problem ist, das er in der Shell den Prozeß startet, aber beim Schließen den Prozeß killed. Setz ich aber ein '&' dahinter, läuft er logischer Weise weiter.
Im Browser macht er leider keine von beiden Varianten.

Ideen ? Brauch ich noch nen Parameter, oder was stimmt nicht ?

Danke Struppix
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Heisst das dein Prozess läuft nur so lange wie die Loginshell noch aktiv ist? Ich glaub das wird mit einem cgi schwierig. Denn nach Ende des cgi wird die Shell geschlossen, da dürfte auch ein & nicht viel helfen. Denn du kannst afaik auch auf der Konsole direkt nicht einen Prozess in den Hintergrund mittels & bringen und dann die Loginshell beenden (abmelden). Mit dem Ende der Shell wird auch der Prozess gekillt.
Wirklich von der Loginshell loslösen kannst du einen via Konsole gestarteten Prozess nur via screen oder was ähnlichem. Du könntest mal probieren im cgi deinen Prozess mittels screen aufzurufen (http://linux.die.net/man/1/screen)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Solche Geschichten sind nicht ganz einfach zu lösen ... aber eine Idee kann ich dir geben: Lass das Starten deines 'Prozesses' - wie schon vorgeschlagen - den cron machen. Schreib ein Shellskript, welches vom Cron sagen wir alle 5 Minuten aufgerufen wird. Lass dieses nachschauen, ob eine bestimmte Datei (1) in deinem PHP-Anwendungs-Verzeichnis existiert und wenn sie da ist, dann lass dein Prozess starten und lösche die Datei (1). In deinem PHP-Skript machst deinen ps usw. und wenn alles so ist, dass das cron-Skript starten sollte, dann erzeugst die Datei (1), damit das cron-Skript bescheid bekommt. (Im Grunde simulierst durch die Datei (1) eine Semaphorensteuerung).

Hört sich zwar im ersten Moment alles sehr seltdam an, ist aber recht einfach zu basteln.

Itari
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
185
Punkte
63
Hört sich zwar im ersten Moment alles sehr seltdam an, ist aber recht einfach zu basteln.

Itari

Hehe, ich habe schon paar Bierse intus. Das macht das nicht einfacher. :D

Werde morgen nochmals ansetzten.

Struppix
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat