¿Debo editar / etc / crontab o ejecutar crontab -e como root?


43

Estoy configurando tareas regulares de mantenimiento del sistema que deben ejecutarse como root. Planeo usar el sabor de cron que viene con Ubuntu 14.04 LTS como predeterminado.

Veo que el administrador anterior (que desde entonces dejó la compañía) editó / etc / crontab directamente. Sin embargo, entiendo que otro enfoque posible sería usarlo crontab -ecomo root. ¿Hay argumentos convincentes para usar uno u otro, o se debe a la preferencia?


99
Para mí, esta parece una pregunta legítima de mejores prácticas, y espero que no se cierre. Ya puedo ver puntos relevantes y objetivos en las respuestas y comentarios al respecto.
MadHatter apoya a Monica el

1
Una vez fui a escribir crontab -l (para enumerar el crontab) pero escribí crontab -; por error que eliminó mi crontab en su lugar. Aprendí mucho ese día.
Leñador

Respuestas:


64

Puede ser útil tener en cuenta que los trabajos en un crontab personal ( crontab -e) siempre se ejecutan como su propietario, donde /etc/crontabcontiene un <user>campo obligatorio adicional que permite a un administrador configurar el trabajo para que se ejecute como un usuario no root.

Editar el crontab del sistema o configurar un crontab personal para root es probablemente un poco más portátil, no específico para ciertas distribuciones de Linux y posiblemente más conveniente para una persona , con todos los trabajos en un solo archivo pero:

Personalmente, prefiero una tercera opción : para cada tarea programada, descartar

  • un archivo /etc/cron.d/con un fragmento de cron
  • un ejecutable (script) en el /etc/cron.[hourly |daily |weekly |monthly]directorio correspondiente .

Eso es más fácil de escribir (simplemente puede crear / sobrescribir / eliminar dichos archivos y no tiene que perder el tiempo en el contenido de un solo archivo crontab) y eso funciona bien con las herramientas de administración de configuración y eso es lo que los administradores de paquetes ya son haciendo de todos modos.

Los trabajos / scripts en /etc/cron.[hourly |daily |weekly |monthly]siempre se ejecutan como root, donde los fragmentos de cron /etc/cron.d/permiten tanto establecer una programación personalizada como ejecutarse como un usuario diferente con el mismo <user>campo obligatorio encontrado /etc/crontab.


18
Un inconveniente de la edición /etc/crontabes que se requerirá una fusión cada vez que actualice el cronpaquete. No tiene ese problema si solo agrega un nuevo archivo a uno de los /etc/cron.*directorios.
kasperd

1
Debería agregar que en la mayoría de las distribuciones /etc/cron.[hourly |daily |weekly |monthly]contiene ejecutables mientras /etc/cron.dcontiene crontabs. Aparte de eso, +1.
GnP

Definitivamente soy un fanático de los directorios cron. [Timing], rara vez necesito algo más granular que las opciones de comunicación. Sin embargo, tenga en cuenta que algunas distribuciones, particularmente Ubuntu, ignorarán silenciosamente las secuencias de comandos con extensiones de archivo en estas carpetas (un error bastante indignante de Internet, teniendo en cuenta que la mayoría de las personas agregaría .sh, que puede haberse solucionado en distribuciones recientes). Es muy difícil entender por qué los scripts no estaban funcionando en esa situación, al menos se garantiza que se ejecute agregar al crontab.
Gargravarr

15

Lo mejor que recuerdo es que crontab -etiene la ventaja adicional de que verifica la sintaxis de crontab antes de instalarlo, y fallará y restaurará la anterior si comete un error. De esta manera, todo lo que funcionaba anteriormente no se detendrá repentinamente si la sintaxis es incorrecta. Creo que la mejor práctica es usar las utilidades, como ejecutar en visudolugar de editar /etc/sudoersdirectamente.


2
+1 Buen punto sobre la validación de sintaxis, aunque reconoce algunos errores de sintaxis también está lejos de ser infalible (es decir, felizmente le permitirá ingresar una /etc/crontablínea con un nombre de usuario en la sexta columna). - Aunque me gustaría argumentar que el uso de herramientas interactivas no es la "mejor práctica" , debe automatizar con herramientas como Puppet / Salt / Ansible, etc., y no debe configurar los servidores a mano en primer lugar. Por otro lado, si usted es de la vieja escuela, entonces sí use sus herramientas.
HBruijn

Ansible y otros son buenos si configura más de 5 servidores, pero no vale la pena por solo 1. Podría argumentar que con solo 1 servidor, un script de Ansible le brinda la capacidad de reconstruirlo de manera idéntica cuando falla 2 años más adelante, pero en ese punto, es probable que el script ya no funcione debido a los cambios de distros / repos.
marcv81

Esta es la razón por la que estoy totalmente en desacuerdo con la respuesta aceptada. Los cambios que se realicen deben ejecutarse a través de este proceso de validación al menos una vez. Si uno copia una línea del nuevo crontab y la proporciona a una herramienta automatizada para propagarse a otros servidores, entonces es lo mejor de ambos mundos.
Monty Harder

Tampoco ayuda si se inicia un script, y hay errores en el script, por lo que se requiere una prueba de ejecución en seco de cualquier manera.
mckenzm

@mckenzm estuvo de acuerdo, pero hay tantas pruebas idiotas que puede aplicar :)
Gargravarr

2

Es realmente una pregunta de estilo, hay una razón por la cual el sistema operativo ofrece varios métodos. Solo sea consistente y no mezcle y combine si no desea confundir a nadie más (o a usted mismo después de un tiempo de no tratar con el sistema); si es difícil ver qué tareas están realmente programadas en todo el host, tiende a para terminar en desagradables sorpresas.


2

Para asegurarme de agregar un trabajo cron que requiera los derechos de un usuario específico, personalmente uso el siguiente comando:

 # crontab -u <user> -e

Puedes agregar sudotambién.

Como dijo @rackandboneman, no hay necesidad de meterse con los archivos /etc/cron.d/. Si se trata de trabajos cron del usuario, use las funciones de crontabcomando.


3
-1 La gran desventaja de hacer lo anterior es que el usuario ahora también puede modificar / eliminar / romper el cronjob, lo que generalmente no es deseable cuando usted como administrador pasó su valioso tiempo configurando las cosas ... También cuando el el usuario es una cuenta de servicio y esa cuenta está bloqueada / caducada, el servicio continuará ejecutándose, pero las pestañas de cron personales para cuentas bloqueadas generalmente se desactivarán.
HBruijn

Si el usuario especificado aquí es un usuario público, como miembro de un entorno de servicio de terminal público, tiene razón. Sin embargo, si se trata del usuario de un servicio / agente ... pensándolo bien, se trata realmente de estilo.
aesnak
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.