Si tuviera que hacer ejecuciones manuales de crontab o similares desde PHP, probablemente usaría una cola. Tenga una tabla de base de datos a la que anexe trabajos. Otro proceso, ya sea desde un cron o ejecutándose como daemon, ejecuta los trabajos a medida que aparecen.
Otra forma de hacerlo es configurar una secuencia de comandos separada y hacer un HTTP GET a la misma. No está pasando de rosca, pero es una forma de disparar a otro comando en PHP.
Por ejemplo, si quería correr /usr/bin/somescript.sh
en la demanda, tendría un somescript.php
que hizo una llamada al sistema. Esto sería en un host virtual solo accesible desde localhost.
Haría una llamada de socket al servidor web y OBTUVE el script. La clave es no leer en el zócalo para que no se bloquee. Si quería verificar el valor de retorno de somescript.php
, lo haría más tarde en mi script principal para evitar el bloqueo.
Si somescript.php
tarda mucho tiempo en ejecutarse (más larga que la secuencia de comandos que llama), se tendrá que hacer un poco de magia para detener Apache de matar al script cuando se cierra el socket.
maldita sea que quería usarlo en una aplicación web :( – Thomaschaaf