2012-03-09 22 views
31

que tienen dos comandos en una tarea programada como esto:¿Se ejecutan dos comandos secuencialmente en un trabajo cron?

mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php 

pero me parece que ambos se están ejecutando al mismo tiempo.

¿Cómo puedo hacer que se ejecute el primer comando y cuando se completa, ejecuta el segundo comando?

También AfterMyFunction1.php tiene solicitudes http de JavaScript que no se ejecutan cuando uso wget. Funciona si abrí AfterMyFunction1.php en mi navegador web.

+1

wget no puede analizar y ejecutar el javascript incrustado en las páginas HTML que recupera. wget no representa la página, solo recupera los contenidos. –

Respuesta

69

Si primero se debe completar el primer comando, debe separarlos con the && operator como lo haría en el shell. Si el primero falla, el segundo no se ejecutará.

+8

Parece más fácil y más fácil hacer una secuencia de comandos que ejecuta múltiples archivos de forma consecutiva y eliminar esa secuencia de comandos en lugar de tener una lista grande de comandos separados por && – JustinP

+12

Si solo tiene dos comandos, no veo dónde está el problema y cómo este archivo ayuda, también tendrás que cuidar ese archivo (permanentes, tienda ...), esto requiere más tiempo, es más costoso y menos eficiente. – BigDong

+0

No creo que esta respuesta sea correcta: el punto y coma ejecutará comandos secuencialmente, no en paralelo. Entonces, no creo que haya nada malo en la línea de comando del OP. – nonagon

2

Puede usar sem que es parte de GNU parallel.

0 0 * * * root sem --jobs 1 --id MyQueue mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1" 
1 0 * * * root sem --jobs 1 --id MyQueue wget -N http://mywebsite.net/path/AfterMyFunction1.php 

Esta configuración cron primero iniciar el mysql través sem, lo que lo puso en una especie de cola de llama MyQueue. Esta cola probablemente estará vacía, por lo que el mysql se ejecuta inmediatamente. Un minuto después, el cron iniciará otro sem que pondrá el wget en la misma cola. Con --jobs 1, sem recibe instrucciones de ejecutar solo un trabajo a la vez en esa cola en particular. Tan pronto como finalice el mysql, el segundo sem ejecutará el comando wget. sem tiene muchas opciones para controlar el comportamiento de colas.

La solución && es probablemente mejor, ya que no ejecutará el segundo comando cuando el primero falle. La solución sem tiene la ventaja de que puede especificar diferentes configuraciones cron, como un usuario diferente. Y evitará la superposición de trabajos cron, si el intervalo cron es más corto que la duración del trabajo.

Cuestiones relacionadas