Una necesidad muy común de una aplicación es ejecutar un script cada X minutos/horas. Básicamente no es nada complicado, solo algunos códigos PHP y una entrada crontab.Cronjob: ¿cómo hacerlo de la manera correcta?
Aunque he escrito algunos de esos cronjobs en los últimos años, todavía no he visto ninguna de las mejores prácticas, al menos no tanto. Al igual que con cada "procesamiento en segundo plano", muchas cosas pueden salir mal, especialmente en una configuración de producción.
Entre ellos:
- Se produjo un error durante la ejecución del cron y el guión murieron el procesamiento de la mitad de los datos
- la tarea programada fue accidentalmente inició dos veces por otro proceso/por error del usuario/lo que sea
- la tarea programada tardó más tiempo del esperado y la secuencia de comandos se llama de nuevo aunque no es hacer el procesamiento de datos
- etc.
¿Cuáles son algunas de las mejores prácticas para escribir scripts cronjob robustos y sólidos como una roca? ¿Escribir un archivo de bloqueo afirmando que solo se ejecuta una instancia, un registro extenso y monitoreo en el proceso para evitar el envío de diez mil correos electrónicos duplicados? ¿Cuáles son tus ideas?
Es interesante que hayas publicado esto porque he estado investigando y preguntándome algunas de las mismas cosas. En mi caso, estoy realmente preocupado por cómo implementar efectivamente el manejo de excepciones en un script de shell que estoy escribiendo. http: // stackoverflow.com/questions/6961389/exception-handling-in-shell-scripting tiene buena información sobre eso en caso de que tenga curiosidad. Principalmente soy un desarrollador de Java y el manejo de excepciones allí es muy sólido, pero parece más difícil en la tierra * nix. –
esto dependería de cada script que se ejecute, no hay respuestas genéricas, algunos necesitan una comprobación de errores muy robusta, algunos no necesitan ninguno ... –
He marcado esta pregunta anticipando respuestas innovadoras con justificación detallada de sus beneficios y desventajas, y estoy bastante decepcionado con las respuestas "Esto es lo que hago". – nickb