¿Dónde poner cronjobs del sistema?

11

Si necesito un cronjob que se ejecuta a nivel del sistema (es decir, no es específico para un determinado usuario), ¿cómo me sugiere que lo cree?

  1. corriendo crontab -ecomo root
  2. anexándolo a /etc/crontab
  3. creando un archivo que define el cronjob en /etc/cron.d/
  4. crear un archivo que defina el cronjob en /etc/cron.*ly/(pero solo si dicho intervalo de tiempo se ajusta a mis necesidades)

Lo que más me preocupa es: ¿cuál de estas soluciones posiblemente se sobrescribirá con una actualización del sistema ?

Además, supongo que si el trabajo es largo, debería ponerlo en un archivo de script separado , por ejemplo, en /root/bin/. ¿Estás de acuerdo?

azulado
fuente
3
Debe indicar qué distribución de Unix o Linux usa.
jlliagre
Estoy aprendiendo ahora :) Pensé que era un comportamiento independiente de la distribución ...
azulado

Respuestas:

13

No usar crontab -e

No lo pondría crontab -ecomo root. Esto generalmente es menos obvio para otros administradores y es probable que se pierda con el tiempo. Al colocarlos /etc/crontab, puede especificar exactamente el tiempo que desea que se ejecuten y también puede especificar un usuario diferente.

Ubicaciones alternativas

Si no le importa ejecutar el script como un usuario diferente, y / o simplemente desea que el script se ejecute semanalmente, diariamente, etc., varias distribuciones proporcionan directorios donde se pueden colocar los scripts que se procesarán automáticamente en un momento específico.

Por ejemplo, bajo distribuciones basadas en Redhat:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

A menudo pongo crons a nivel de sistema que quiero ejecutar en un momento específico en /etc/cron.dlugar de /etc/crontab, especialmente si son scripts más complejos.

Prefiero usar los directorios debajo /etc/cron*porque son un lugar mucho más obvio que otros administradores de sistemas sabrán que deben buscar y los archivos aquí se pueden administrar a través de instalaciones de paquetes como rpmy / o apt.

Proteger entradas

Cualquiera de los directorios que he mencionado están diseñados para colocar scripts que no serán destruidos por un administrador de paquetes. Si le preocupa proteger una entrada crontab, definitivamente no la incluiría en el /etc/crontabarchivo y, en su lugar , la incluiría como un script adecuado en uno de los /etc/cron*directorios.

slm
fuente
1

Yo elegiría el # 4. Permite que la configuración del sistema elija cuándo ejecutar el trabajo, y generalmente hacen un buen trabajo de "ejecutar cuando no está ocupado". Cambiar el programador cron del sistema también afectaría automáticamente el tiempo de ejecución del script.

La desventaja es que no tienes control directo sobre cuándo se ejecuta. Si necesita un control más directo, use el # 1.

1 es menos probable que se sobrescriba con una actualización del sistema. Aunque 3 y 4 deberían ser bastante seguros. todo depende de cómo se actualice. Su distribución puede actualizarse como quiera, pero solo 2, por lo general, correrían el riesgo de sobrescribirse.

Finalmente, pondría los scripts en / usr / local / bin. Ese es el lugar "normal" donde coloco las cosas del sistema que no son administradas por el administrador de paquetes de la distribución. / root / bin también es aceptable si solo va a ser ejecutado por root. Sin embargo, todo esto es principalmente de sabor.

coteyr
fuente
0

Cualquiera de los anteriores funcionará, y ninguno de los anteriores debe sobrescribirse con las actualizaciones. La elección real se reduce a la opinión: tres personas diferentes a menudo tendrán al menos dos, si no tres respuestas diferentes.

John
fuente