¿Cómo puedo administrar mi crontab de manera efectiva para evitar problemas de múltiples actualizaciones por parte de múltiples usuarios?

¿Cómo puedo administrar mi crontab de manera efectiva para evitar problemas de múltiples actualizaciones por parte de múltiples usuarios?

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 diffcrontab 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 sudodel 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 sudoentrada 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.txty las envían al repositorio cuando terminan.

$ svn commit -m "some msg.." app_cron_data.txt

Para implementar estos cambios, ejecutarían este sudocomando:

$ 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...

información relacionada