Shell scripts con PHP [Solucionado]

Hola a todos, me encuentro con un inconveniente con unos scripts de php. Voy a tratar de dar la mayor cantidad de datos posibles y de ejemplificar bien el escenario de trabajo.
Tengo un servidor web con apache + mysql + php5 corriendo sin problemas.
El tema es el siguiente, tengo que ejecutar desde una pagina con php un script que tengo alojado en el servidor, que pasa, si el script demora mucho tiempo ( porque tiene un proceso que demora) no anda.
Paso a comentar las pruebas que hice:
1° creo un php con instrucciones simples, $shell=shell_exec("ls -la") y al mostar la salida funciona todo perfecto
2° creo un php que ejecute un sript simple $shell=shell_exec("sh prueba.sh") dentro de prueba.sh una instruccion simple como la anterior, y anda bien.
3° creo un php con insctrucciones que demoran bastante tiempo $shell=shell_exec("pdftoppm archi.pdf archi") y no lo ejecuta
4° creo un php que ejecute un script con esos comandos $shell=shell_exec("sh pdftoppm.sh") y no lo ejecuta
Estas pruebas echas desde el navegador
Si desde la consola, pruebo el script, #sh pdftoppm.sh, anda perfecto.
Si desde la consola ejecuto el php #php5 pdftoppm.php , tanto el que tiene las instrucciones como el que ejecuta el .sh funciona bien.

Por lo que veo, el problema esta en que si se ejecuta desde la web un comando que demora mucho tiempo no lo hace, y si desde la consola.
Espero haber sido claro y haber dado datos suficientes.
Saludos
<---edito--->
Por si alguien se pregunta porque tengo que hacer eso, es que tengo que tomar un pdf que sube un usuario, hacerlo imagen, y con fpdf utilizar esa imagen de fondo para "completarlo" y generar un nuevo pdf. Si a alguien se le ocurre una mejor idea, bienvenida sea!!...
saludos!!
<---/edito--->

Hola,

para empezar, hace mucho que no hago cosas serias con php+web, pero tu problema parece que es de temporización.

En realidad, php no sabe el tiempo que va a tardar lo que ejecutas en el sistema, así que seguro que lo ejecuta, pero el servidor web temporiza, te da un error y fin. Si esto es así, puedes mirar en el servidor web (apache tenía una variable) para aumentar el tiempo antes de finalizar una sesión por temporización.

Eso te servirá mejor para ver si es cierto y lo está ejecutando.

Otra opción que tienes es hacerlo por partes:

1. Una vez que te manden el fichero, lo guardas en el disco en algún sitio (esto ya lo estás haciendo), cambiandolé el nombre y le añades un identificador único vía php, por ejemplo un pid o un random. Así si te suben el fichero abc.pdf, lo guardas como 24534.pdf (así varios usuarios pueden trabajar a la vez).
2. Ejecutas el comando de conversión sobre ese fichero en background y le devuelves al usuario una pantalla que se refresque cada 5 segundos y mire si se ha creado el nuevo fichero 24534.ppm
3. Sino, pues muestras la misma página de nuevo, que sí, ejecutas el siguiente programa y muestras la página de espera
4. repetir :-)

Creo que ya pillas la idea. De esta forma, dejas los procesos ejecutandose en el servidor y miras si están los ficheros terminados para enviarlos al usuario, pero el usuario recibe un "Procesando el fichero ..." Así no te caducan las sesiones. Miraté la función "exec" de php.

Saludos.

Hola, ante todo muchas gracias por responder!!..
Aver si entiendo lo que me dices.
Primero aumente la variable Timeout del apache.conf y nada, le puse un valor mucho mas grande y el problema sigue.
Por lo otro que me comentas, el 1° punto esta clarisimo, y es como lo estoy trabajando.
Lo que no me queda claro es el 2° punto donde me dices que ejecute el comando de convercion en background.
¿Como logro hacer eso?
Si no es mucha molestia, ¿Podrias explicarme como hacerlo?
Desde ya muchas gracias, y otra vez muy agradecido por tu respuesta.
Mientras tanto voy a seguir leyendo sobre el comando exec.
Saludos!!

Hola,

es lo siguiente, imaginate un programa en shell (hola.sh) que hace lo siguiente:

--
#!/bin/sh
sleep 300
echo "hola" > fichero.txt
--

Si lo ejecutas con php y esperas la respuesta del script, tienes que esperar 300 segundos y el usuario se desespera porque no sabe si funciona o no (eso, si no temporiza el navegador/servidor).

Sin embargo, si haces lo siguiente:

Una página web que ejecute el script y lo deje en background (como si ejecutas en shell algo y le pones el "&" al final). Para eso utilizas el comando exec de php.
Nada más ejecutarlo, que te lleve a otra página (puede ser la misma, pero como quieras) y esa página lo que hace es:

1. Mira si existe el fichero "fichero.txt" en el servidor (lo que significa que el proceso hola.sh ha terminado). En caso que existea, haces con el fichero lo que quieras.
2. Si no existe, se recarga a si misma (javascript reload()). La página puede tener algo que informe al usuario que el proceso está aun en curso.

Espero haberme explicado mejor.

Saludos.

Hola, muchas gracias por responder!!
Te comento que entendi a la perfeccion lo que me explicas, y es mas me sirve muchisimo! pero eh encontrado el problema y no venia por ahy....
El tema fue no dar los datos suficientes a la hora de plantear el inconveniente.
Tengo el servidor web montado en una jaula chroot, y al no tener los programas instalados en la jaula.... era ovbio que no iban a andar.
Los datos me re sirvieron, y agradezco inmenzamente las respuestas.

Saludos a todos!!