Quiero que se ejecuten dos trabajos en algún momento todos los días, en serie, exactamente en el orden que especifique. ¿Este crontab hará de manera confiable lo que quiero?
@daily job1
@daily job2
Estoy asumiendo que se ejecutan uno tras otro, pero era incapaz de encontrar la respuesta mediante la búsqueda en la Web o de cualquiera de estas páginas de manual: cron(1)
, crontab(1)
, crontab(5)
.
El crontab anterior obviamente no hará lo que quiero si cron ejecuta cosas programadas @daily
en paralelo o en un orden impredecible.
Sé que simplemente puedo hacer un script de shell para activarlos en orden, solo tengo curiosidad por saber cómo se supone que funciona el cron (y soy demasiado vago para recopilar datos de prueba o leer el código fuente).
Cron es proporcionado por el cron
paquete. El sistema operativo es Ubuntu 10.04 LTS (servidor).
cron
paquete? Casi todos los demonios cron que conozco manejarán esto en orden, y sincrónicamente, generalmente analizando primero cada archivo en orden alfabético (aunque algunos lo hacen por cantidad de tiempo entre ejecuciones en orden ascendente), y luego los trabajos dentro en orden de línea.Respuestas:
Después de un rápido vistazo a la fuente (en Debian Squeeze, que creo que es la misma versión), parece entradas dentro de un archivo dado y con los mismos tiempos se ejecutan en orden. Para este propósito,
@daily
y0 0 * * *
son idénticos (de hecho@daily
es idéntico a0 0 * * *
este cron).No confiaría en esto en todos los ámbitos. Es posible que algún día alguien decida que cron debe ejecutar trabajos en paralelo, para aprovechar estas CPU de 32 núcleos que tienen 31 núcleos que funcionan inactivos. Esto se puede hacer al implementar este elemento de tareas de 20 años encontrado en la fuente cron:
Es muy fácil escribir
@daily job1; job2
aquí. Si es importante que los trabajos se ejecuten en orden, conviértalo en una consecuencia directa de lo que escribe.Además, hacer que la orden sea explícita elimina el riesgo de que un futuro administrador reordene las líneas pensando que no importará.
fuente
http://ss64.com/osx/crontab.html (así como otras referencias) dice que @daily es equivalente a
que dice correr a la medianoche. Esperaría que se lanzaran dos líneas de este tipo lo más cerca posible a la medianoche, sin garantía de cuál sería el primero. Estoy de acuerdo con la sugerencia de jw013 en su comentario:
fuente
@Giles comenta sobre el uso de un solo script cuando se importa para ejecutar las cosas en orden es apropiado.
cron.daily
los archivos no especifican tiempos de ejecución. Según mi experiencia, se ejecutan en serie. Esto tiene sentido ya que muchos trabajos en segundo plano pueden ejecutarse en una computadora portátil u otro sistemaCuando se especifican los tiempos, se ejecutan todos los trabajos programados para el minuto actual. Es una buena idea usar diferentes tiempos.
Si tiene trabajos que son mutuamente excluyentes, es común usar un archivo de bloqueo para determinar si el otro trabajo se está ejecutando.
fuente
@daily
es ligeramente diferente a/etc/cron.daily
. La primera es una sintaxis alternativa para usar en un crontab. También eche un vistazo arun-parts
. Mi sistema usarun-parts
para ejecutar programas/etc/cron.daily
. Según la página derun-parts(8)
manual, "Los archivos se ejecutan en el orden de clasificación léxica de sus nombres ...".