Tengo un crontab que incluye muchos usuarios actualizándolo. El problema es que debido a esto, no es fácil saber quién hizo qué modificación de un cronjob.
Estaba pensando en crear un script para hacer un diff
crontab con una versión previamente guardada para al menos poder ver lo que se ha cambiado, pero pensé que tal vez haya una solución estándar para esto. ¿Cuál es el mejor enfoque para administrar mi crontab?
Respuesta1
Subversión
Pondría el contenido del crontab bajo control de subversión y solo otorgaría acceso a este usuario a través de sudo
. Específicamente, solo permitiría que las personas accedan a un comando a través sudo
del cual tomaría el encabezado de Subversion y lo instalaría como el último crontab para este usuario en particular. Esto le proporcionará lo siguiente:
- Una pista de auditoría de quién hizo qué
- La capacidad de retroceder a un archivo crontab anterior si surge un problema
- Evite que los operadores tengan demasiado permiso para esta cuenta especial.
Puede parecer demasiado complicado, pero lo que describí no tiene nada de complicado si lo divides en trozos pequeños.
multicron
Otro enfoque sería utilizar una herramienta/script comomulticron. Esta herramienta le permitiría administrar los datos de crontab externos a la entrada de crontab para que pueda controlar mejor quién y cuándo tiene acceso a estos cambios.
Ejemplo de uso de subversión
Suponiendo que haya configurado un repositorio SVN, podría crear una sudo
entrada que permitiría a los usuarios hacer algo como esto:
$ sudo deploy_app_cron.bash
Las entrañas de este script podrían hacer, entre otras cosas, esto:
svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -
El contenido del archivo app_cron_data.txt
:
$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"
Ejemplo de bucle de uso
Entonces el usuarioA quiere actualizar la entrada de crontab. Harían lo siguiente para comenzar:
$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A mywksp/app_cron_data.txt
$ cd mywksp
Ahora hacen algunas ediciones en el archivo crontab app_cron_data.txt
y las envían al repositorio cuando terminan.
$ svn commit -m "some msg.." app_cron_data.txt
Para implementar estos cambios, ejecutarían este sudo
comando:
$ sudo deploy_app_cron.bash
Referencias
Respuesta2
Bueno, la solución correcta es usar cron correctamente y permitir que cada usuario tenga su propio crontab por usuario. ¿Hay alguna razón omitida por la que configurarías crontabs de esta manera? Incluso puede ser más preferible usar crontabs por usuario y alguna otra solución alternativa a lo que sea que este "crontab unificado" pretenda superar...