
¿Es posible hacer que cron reciba sus instrucciones desde la salida de un script de shell en lugar de leer un archivo estático?
Estoy tratando de administrar crontabs en varias máquinas y mantener archivos crontab separados para cada máquina es una tarea ardua. En su lugar, me gustaría que cron ejecute un script de shell que imprima líneas crontab para cada trabajo en función de si una máquina determinada está asignada a ese trabajo. ¿Puedo hacer esto?
PD: He visto algunos que sugieren Puppet/Chef/etc. para este propósito, pero creo que es excesivo para manejar solo este problema.
Respuesta1
Creo que la forma más sencilla de hacer esto en la mayoría de las distribuciones sería utilizar herramientas de implementación automatizadas como Puppet/Chef y el directorio /etc/cron.d. Puede colocar crontabs en ese directorio, excepto que usan el siguiente formato en lugar del típico:
* * * * * <user> <command>
¿Dónde está el usuario que ejecutará el cron?
Parece pensar que Puppet es excesivo (no lo es), pero la parte del directorio también se aplicaría a cualquier otra solución.
Respuesta2
Sí, por supuesto que puedes hacer esto. Simplemente configure cualquier script que necesite para producir la salida de crontab y envíelo a los servidores de destino.
Allí, un trabajo cron estático puede leer específicamente esos crontabs para ejecutarlos, desde cualquier ubicación que sea conveniente.
Respuesta3
Este es exactamente el uso previsto para títeres y amigos.
Su única entrada crontab
podría ser ejecutar el agente títere, si no le gusta cómo lo configura la administración de paquetes de su distribución.
El guión externo estaría a cargo del titiritero. En un lugar. Para todas las máquinas.
Si considerar el uso de un script externo es un problema suficiente, recomiendo Puppet. Seguramente el chef puede hacer algo similar.
Comencé con Puppet solo para administrar ~/.ssh/authorized_keys
en varias máquinas, lo cual es un "pequeño" problema similar.
Respuesta4
Un truco popular es crear una entrada en el crontab que actualice todo el crontab. Esto funcionará bien siempre y cuando su script de shell nunca proporcione datos incorrectos a crontab
.
Sin embargo, sugiero un enfoque diferente que será más fácil de administrar: tener una entrada crontab estática que ejecute un script con frecuencia. Haga que el script haga todo el trabajo pesado de determinar cuándo es el momento de ejecutar algo. De esta manera, aún puede usar el crontab como un crontab normal sin tener que hacer que el script sepa todo lo que podría estar ejecutándose en cada máquina.