intento ejecutar procesos de php en segundo plano e iniciarlo desde un archivo php.nohup: ejecutar el proceso de PHP en segundo plano
Algunas informaciones: PHP Versión 5.2.17, php safe_mode está desactivado, sistema de Linux. Comienzo el proceso con el ejecutivo, intenté ya con el shell_exec. Me puse todos los archivos a 0755, 0777.
$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");
Si i imprimir esta declaración, me sale este y el PID está bien:
nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!
si miro en procesos bajo ssh con
top
veo mi proceso php5 con el pid correcto. usuario es root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5
3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3542 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3545 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3548 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3551 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
si comienzo a la parte superior manual de proceso es el siguiente:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8141 xxxxxxxx 22 2 24048 9.9m 5344 S 10 0.5 0:00.31 php5
El problema: parece que nada happens.To depurar un poco i escribió una salida en el archivo
ob_start();
echo "STARTING...";
writeLog(ob_get_contents());
//...
function writeLog($info){
$handle = fopen("file.log", "a+");
fwrite($handle, $info);
fclose($handle);
}
exit;
No hay registros en mi archivo. Si inicio este archivo en mi navegador, se procesa correctamente y obtengo mi file.log con la información de "depuración".
¿Por qué esto funciona en el navegador y no en el comando exec/shell_exec ??! Tengo exactamente estos procesos php con pid correcto, pero no hay resultado.
¡Muchas gracias por la ayuda!
Primero debe intentar proporcionar una ruta de acceso absoluta al script que está intentando ejecutar, no uno relativo como el que parece estar haciendo ahora. Es decir. use 'nohup/usr/local/bin/php5 /absolute/path/to/file.php>/dev/null 2>/dev/null & echo $!' – wimvds
Tengo la ruta absoluta a este archivo. Puedo comenzar este nohup desde cada directorio en ssh. esta funcionando. desafortunadamente no con php. – stoe
Entonces podría ser un problema de permiso. Así que revise sus registros (Apache, registro de errores php, registro de la consola) ... Si está ejecutando AppArmor/SELinux intente apagarlo para probar si necesita cambiar su política de seguridad para permitir estas tareas en segundo plano. – wimvds