Ejecutar comando durante x tiempo

Buenas, me estoy haciendo un script en el que necesito iniciar un archivo php el cual cumple su función pero se queda "colgado" y no puedo escribir después en la terminal.
Mi duda es si hay alguna opción para ejecutarlo durante por ejemplo 20 segundos y después matarlo automáticamente. La finalidad es crear un .sh que me ejecute cron cada 30 minutos, estoy con linux mint.

Edito: si puede ser que lo inicie durante 20 segundos y después cierre el proceso, acabo de mirar y tenía como 30 procesos de lo mismo y cada uno con 5mb, imagino que terminaría tirando el servidor al cabo de unos días XD
Con "matarlo automáticamente" te refieres a hacer un killall por ejemplo? Con Python se podría hacer (y con bash y otras cosas también debería, desde luego).
noentiendero escribió:Con "matarlo automáticamente" te refieres a hacer un killall por ejemplo? Con Python se podría hacer (y con bash y otras cosas también debería, desde luego).


Sí, lo he medio solucionado con un "killall php5" al inicio del script, pero buscaba algo más elegante, me parece demasiado brusca la solución.
flap0 escribió:
noentiendero escribió:Con "matarlo automáticamente" te refieres a hacer un killall por ejemplo? Con Python se podría hacer (y con bash y otras cosas también debería, desde luego).


Sí, lo he medio solucionado con un "killall php5" al inicio del script, pero buscaba algo más elegante, me parece demasiado brusca la solución.


Se me ocurre que igual podrías hacer un script en Python con Threads, en un thread haces que se ejecute el script php. Luego los threads pueden pararse (aunque no re-ejecutarse), en teoría debería pararse también la orden del php, aunque no estoy del todo seguro.
Un script del siguiente estilo te debería de servir, y esto en una tarea cron/systemd
./mi_programa &
pid=$!  #PID of the last backgrounded process.
sleep 20
kill $pid


Aunque lo lógico es ver porque el programa en php no termina.
Gracias por las respuestas, luego probaré.
Más o menos sé por qué no se se ejecuta bien: el sistema lo instale hace tiempo para probar cosas y aprender pero con el tiempo pasó a ser mi servidor personal, tras miles de instalaciones unas sobre otras.
Y básicamente lo que tendría que hacer es reinstalar el sistema y configurarlo todo bien, pero entre la pereza y falta de tiempo me es imposible ahora XD.
Mírate el comando timeout, a ver si te sirve.
6 respuestas