conexión ssh ejecutar un php

Iniciado por OssoH, 21 Septiembre 2015, 13:15 PM

0 Miembros y 1 Visitante están viendo este tema.

OssoH

Hola :
Necesito ejecutar un php que dura más de 60 segundos y para evitar el timeout del navegador lo que hago es establecer una conexión ssh con mi servidor compartido y ejecutar nohup php <nombre fichero.php> &

El codigo es el siguiente :
prueba.php

Código (php) [Seleccionar]

include('Net/SSH2.php');
   $server = "miservidor.es";
   $username = "xxx";
   $password = "xxx";
   $ssh = new Net_SSH2($server);
   if (!$ssh->login($username, $password)) {
       exit('Login Failed');
   }
  $ssh->exec("nohup php carpetaprueba/prueba/wait.php &");


y el wait.php es el fichero "tocho" que tarda mucho en procesar. De momento le tengo puesto un sleep y simplifico el código de forma que lo pueda hacer funcionar.

Código (php) [Seleccionar]

<?php
print "<p>Comienzo</p>\n";
for (
$i 0$i 2$i++) {
    print 
"<p>$i</p>\n";
sleep(15);
}
print 
"<p>Final</p>\n";


// El mensaje
$mensaje "Línea 1\r\nLínea 2\r\nLínea 3";
// Si cualquier línea es más larga de 70 caracteres, se debería usar wordwrap()
$mensaje wordwrap($mensaje70"\r\n");
// Enviarlo
mail('mail@dominio.es''Mi título'$mensaje.'...'.$i);
?>



cuando ejecuto el prueba.php desde el navegador deja la pantalla en blanco (no hay errores) y no envia el email que es la ultima instrucción que hace el php.
En cambio si cambio el sleep(3) en wait.php si que lo ejecuta y envia el correo.

¿Cómo lo hago para que se ejecute en segundo plano y cuando termine de procesar todo el wait.php envie el correo aunque haya cerrado la ventana del navegador?
Muchas gracias.



OssoH

el set_time_limit no puedo modificar en servidores compartidos. En este caso en concreto 1and1.es
Si funcionase el timeout no necesaria hacer una conexion ssh y acceder al CLI php.
De todas formas gracias.

engel lex

para ver si podemos hacer algo más simple...

que operación haces que dura tanto?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

¿Porque tienes un sleep en primer lugar?

OssoH

Tengo el sleep(x) para simular como si el php durase mucho tiempo en terminar su proceso.
Es decir, el fichero wait.php tendrá otras lineas de código que no tienen nada que ver con el actual, en concreto lo usare para generar un pdf. Esta generación del fichero pdf lleva mucho tiempo de procesamiento, por eso toda la "historia" que quiero montarme.
Espero haberme explicado bien.

REsumiendo, básicamente lo que quiero es ejecutar un fichero php en segundo plano de forma que si cierro la ventana del navegador se siga ejecutando.

Gracias

engel lex

por qué no generas el pdf por partes... así con ajax vas llamando cada sección, tal que nunca supere 30 segundos
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

OssoH

#7
Porque si lo hago así, luego me toca montar todas las partes en un único pdf. Se que hay librerias que lo hacen http://pdfmerger.codeplex.com/ pero no lo veo práctico.
Y porque también al tardar tanto tiempo en crear el pdf (aprox 3 - 5 min) es un coñazo tener al usuario esperando todo ese tiempo sin que se pueda cerrar el navegador.
Veo más práctico que introduzca su email y cuando termine de generarlo enviarselo.

engel lex

son 3 a 5 minutos -.- no 8 horas... con un progress bar, no es gran cosa... puede tranquilamente usar otras pestañas porque no está usando banda
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

Cita de: OssoH en 21 Septiembre 2015, 18:10 PM
Tengo el sleep(x) para simular como si el php durase mucho tiempo en terminar su proceso.
Es decir, el fichero wait.php tendrá otras lineas de código que no tienen nada que ver con el actual, en concreto lo usare para generar un pdf. Esta generación del fichero pdf lleva mucho tiempo de procesamiento, por eso toda la "historia" que quiero montarme.
Espero haberme explicado bien.

REsumiendo, básicamente lo que quiero es ejecutar un fichero php en segundo plano de forma que si cierro la ventana del navegador se siga ejecutando.

Gracias

¿Pero porque quieres simular que dure mucho tiempo asi? Si estas preocupado por el max_execution_time de nada te sirve sleep porque no cuenta para max_execution_time. Desde consola PHP no tiene max_exeuction_time a menos que tu proveedor (el del ssh) haya puesto una regla para eso. Y si tienes acceso ssh, estas tan limitado que no puedes cambiar la configuracion de php? Desde consola no deberías tener este tipo de problemas. Cuando ejecutas el interprete de PHP tienes opcion inclusive de negar la configuración del php.ini.