¿Cuál es la diferencia entre cron.d (como en /etc/cron.d/) y crontab?

18

¿Cuál es la principal diferencia entre el directorio cron.d (como en /etc/cron.d/) y crontab?

Por lo que yo entiendo, uno podría crear un archivo como /etc/cron.d/my_non_crontab_cronjobsy poner lo que quiera dentro de él, tal como lo haría a crontabtravés de crontab -e.

Entonces, ¿cuál es la principal diferencia entre los dos?

Arcticooling
fuente
ubicación en el sistema y formato.
Rui F Ribeiro
¿Formato? De los 2 ejemplos que he visto, también tiene la sintaxis de 5 unidades de tiempo, o lo estoy confundiendo con crontab.
Arcticooling

Respuestas:

24

Las diferencias se documentan en detalle en la página de cron(8)manual de Debian. La principal diferencia es que /etc/cron.dse rellena con archivos separados, mientras que crontabadministra un archivo por usuario; Por lo tanto, es más fácil administrar el contenido del /etc/cron.duso de scripts (para instalación y actualizaciones automáticas), y más fácil de administrar crontabusando un editor (para usuarios finales realmente).

Otras diferencias importantes son que no todas las distribuciones son compatibles /etc/cron.d, y que los archivos /etc/cron.ddeben cumplir un cierto número de requisitos (más allá de ser trabajos cron válidos): deben ser propiedad de root y deben cumplir con run-partslas convenciones de nomenclatura ( sin puntos , solo letras, dígitos, guiones bajos y guiones).

Si usted está considerando usar /etc/cron.d, por lo general vale la pena considerar uno de /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, o /etc/cron.monthlyen su lugar.

Stephen Kitt
fuente
1
Y para un ejemplo del mundo real, los elementos cron.dse suelen agregar mediante la instalación del paquete, mientras que los diversos crontabarchivos están llenos de cosas creadas por un usuario correspondiente. Es decir, el paquete certboto letsencryptcoloca una entrada cron.d: antes de que el paquete estuviera disponible, el administrador del sistema (root) agregaría una entrada en el usuario raíz que crontabapunta a un script de shell / etc. para mantener los certificados actualizados.
ivanivan
Gracias Stephen! ¿Por qué recomienda usar directorios cron por hora / semana / mes? Y por cierto, ¿por qué la página de manual allí se llama cron (8) para qué es el 8 (la página de manual para crontab se llama crontab (1)).
Arcticooling
1
@Arcticooling, consulte esta pregunta para obtener una explicación de la(8)
user4556274
Los directorios por hora, etc. simplifican la adición de trabajos (no es necesario averiguar la sintaxis exacta) y, lo que es más importante, permiten que el sistema varíe el tiempo de ejecución real según las circunstancias; Esto es particularmente útil en sistemas que no siempre están activados, con anacron.
Stephen Kitt
1
La desventaja de los hourly|daily|weekly|monthlydirectorios es que (AFAICT), siempre se ejecutan como root y no admiten directamente la ejecución con menos privilegios.
ilkkachu
5

Yo diría que la diferencia principal es la obvia: /etc/crontaby /etc/cron.dno son modificables por los usuarios normales, mientras que los crontabs por usuario en los /var/spool/cronque la crontabherramienta edita sí lo son. (Sujeto cron.allowy cron.deny, por supuesto). Por supuesto, en un sistema en el que usted sea el administrador, puede usar cualquiera de los dos. En un sistema compartido, los usuarios habituales solo pueden usar uno.

Relacionado con esto está el campo adicional en los archivos de todo el sistema, el nombre de usuario bajo el cual se ejecuta el trabajo.

ilkkachu
fuente