[PHP/Shell] Ã?berprüfen ob ein Programm läuft

Bash, Shell, PHP, Python, Perl, CGI
kos
Posts: 56
Joined: 2004-02-15 03:36

[PHP/Shell] Ã?berprüfen ob ein Programm läuft

Post by kos » 2004-07-02 02:17

Hallo,

ich möchte ein PHP-Script schreiben, welches überprüft ob eine bzw. meherere angegebener Anwendungen laufen oder nicht.
Mir geht es darum, mit welchem kommando (shell?) kann ich ein Programm suchen und dementsprechend TRUE oder FALSE zurückgeben.

Bisher habe ich es wie folgt versucht, was ein anfang ist, jedoch möchte ich nach möglichkeit noch eine andere Variante nutzen:

Code: Select all

#!/usr/bin/php -q
<?php
$logfile = "servstat.run";
if(file_exists($logfile)) unlink("servstat.run");
shell_exec("ps ax >> ".$logfile);

$mainfile = fopen($logfile, "r");
$filesize = filesize($logfile);
$runfile = fread($mainfile, $filesize);

$suchstr = array("cod_lnxded","testcmd","mysqld");

$i = 0;
while($i <= 2) {
  echo "ID: $in";
  if(eregi($suchstr[$i], $runfile)) {
    $run[$i] = true;
  } else {
    $run[$i] = 0; 
  } 
  echo "  ".$run[$i]."n";
  $i++; 
}
 
echo "Call of Duty: ";
if($run[0] = true) echo "RUNNING!n";
else echo "OFFLINE!n";
 
echo "Test: ";
if($run[1] = true) echo "RUNNING!n";
else echo "OFFLINE!n";
 
echo "MySQL-Server: ";
if($run[2] = true) echo "RUNNING!n";
else echo "OFFLINE!n";
?>
Als ausgabe sieht es bei mir wie folgt aus:

Code: Select all

ID: 0
  1
ID: 1
  0
ID: 2
  1
Call of Duty: RUNNING!
Test: RUNNING!
MySQL-Server: RUNNING!
Ist irgendwo im Code ein fehler?
Das Problem was ich mit diesem "komischen" Script habe ist das troz nicht vorhanden sein des Programms und richtig gesetzer ID bzw. true und false (als 0), immer RUNNING ausgegeben wird, obwohl wie man sieht bei ID 1 die Variable $run[1] = 0 ausgibt.

Gerade weil dieses Script ziemlich absurd ist, zumindest meiner meinung nach, möchte ich gern irgend einen anderen weg der Programmüberprüfung haben.

Danke im schonmal vorraus!

mc5000
Posts: 308
Joined: 2004-06-17 11:56
Location: Köln

= ist nicht ==

Post by mc5000 » 2004-07-02 09:06

du hast im if teil keinen Vergleich
== anstatt = nutzen

mit = weist du ja einen wert zu und vergleichst ihn nicht - jetzt wird geprüft ob die zuweisung geklappt hat und nicht ob der wert gleich ist :lol:

PS

Es gibt aber auch einfachere Möglichkeiten:

Code: Select all

ps -aux | grep "programmname" | grep -v
liefert nur was, wenn das Programm auch läuft .....

kos
Posts: 56
Joined: 2004-02-15 03:36

Re: = ist nicht ==

Post by kos » 2004-07-02 10:16

mc5000 wrote:du hast im if teil keinen Vergleich
== anstatt = nutzen
arg, ja stimmt ich wusste doch das da irgendwas nicht stimmt.
das kommt halt davon wenn man mehrere sachen auf einmal macht, bei dem einen ist ein vergleich mit nur einem = und bei dem andern dann mit zwei.
danke.
Es gibt aber auch einfachere Möglichkeiten:

Code: Select all

ps -aux | grep "programmname" | grep -v
liefert nur was, wenn das Programm auch läuft .....
hm, das hab ich auch schonmal getestet, aber dann müsste ich ja auch 'ps' immer wieder neu aufrufen. ich hatte mich auch schon gefragt ob man die shell-ausgabe nicht irgendwie direkt in eine variable schließen kann um dann zu prüfen ob dort ein inhalt existiert oder nicht?

bfal
Posts: 68
Joined: 2002-07-07 15:12
Location: Lüneburg

Re: [PHP/Shell] Ã?berprüfen ob ein Programm läuft

Post by bfal » 2004-07-02 10:33

Hei,

ich möchte kurz den Blick auf http://freshmeat.net/redir/safetynet/92 ... /safetynet lenken. Einfaches Perlskript, welches Prozesse überwacht und daraufhin eine Aktion ausführt. Setze ich seit ca. 1 Jahr ein, und funzt.

Nur für den Fall, das du mit deinem Skript nicht schon fertig bist :wink:

Gruß
Björn