Como una forma de construir un perro guardián de un hombre pobre y asegurarme de que se reinicie una aplicación en caso de que falle (hasta que descubra por qué), necesito escribir un script CLI PHP que cron ejecutará cada 5mn para verificar si el proceso aún se está ejecutando.Comprobando si el proceso aún se está ejecutando?
Basado en this page, probé el siguiente código, pero siempre devuelve True incluso si la llamo con datos falsos:
function processExists($file = false) {
$exists= false;
$file= $file ? $file : __FILE__;
// Check if file is in process list
exec("ps -C $file -o pid=", $pids);
if (count($pids) > 1) {
$exists = true;
}
return $exists;
}
#if(processExists("lighttpd"))
if(processExists("dummy"))
print("Exists\n")
else
print("Doesn't exist\n");
A continuación, he intentado this code ...
(exec("ps -A | grep -i 'lighttpd -D' | grep -v grep", $output);)
print $output;
... pero no obtengo lo que esperaba:
/tmp> ./mycron.phpcli
Arrayroot:/tmp>
FWIW, este script se ejecuta con la versión CLI de PHP 5.2.5, y el sistema operativo es uClinux 2.6.19.3.
Gracias por cualquier pista.
Editar: Esto parece funcionar bien
exec("ps aux | grep -i 'lighttpd -D' | grep -v grep", $pids);
if(empty($pids)) {
print "Lighttpd not running!\n";
} else {
print "Lighttpd OK\n";
}
gracias a todos. Llamar a exec() con grep (pgrep no está disponible en el dispositivo integrado en el que estoy ejecutando esto) parece hacer el trabajo. – Gulbahar
Pensé que compartiría un comentario rápido aquí. Probé 'pgrep' con' exec' como se muestra, Parece que el proceso de ejecución creará rápidamente otro proceso ... que tiene la misma cadena. Por lo tanto, siempre devuelve una única ID ... pensando quizás usando algo como 'if count = 2' ... Hasta ahora usar count = 2 funciona ... Pero solo una palabra de advertencia aquí ... – Mayhem