Dove mettere i cronjob di sistema?


11

Se ho bisogno di un cronjob che funziona a livello di sistema (cioè non specifico per un determinato utente) come mi consigliate di crearlo?

  1. in esecuzione crontab -ecome root
  2. aggiungendolo a /etc/crontab
  3. creando un file che definisce il cronjob in /etc/cron.d/
  4. creando un file che definisce il cronjob in /etc/cron.*ly/(ma solo se tale intervallo di tempo si adatta alle mie esigenze)

Ciò che mi preoccupa maggiormente è: quale di queste soluzioni sarà probabilmente sovrascritta da un aggiornamento del sistema ?

Suppongo inoltre che se il lavoro è lungo dovrei inserirlo in un file di script separato , ad esempio in /root/bin/. Sei d'accordo?


3
Dovresti indicare quale distribuzione Unix o Linux usi.
jlliagre,

Sto solo imparando ora :) Ho pensato che fosse un comportamento distro-indipendente ...
bluastro

Risposte:


13

Non usare crontab -e

Non lo metterei crontab -ecome root. Questo è generalmente meno ovvio per gli altri amministratori ed è probabile che si perda nel tempo. Inserendoli /etc/crontabpuoi specificare esattamente l'ora in cui vuoi che vengano eseguiti e puoi anche specificare un altro utente.

Posizioni alternative

Se non ti interessa eseguire lo script come un altro utente e / o vuoi solo che lo script venga eseguito settimanalmente, quotidianamente, ecc., Diverse distribuzioni forniscono directory in cui è possibile posizionare gli script che verranno automaticamente elaborati in un momento specifico.

Ad esempio, nelle distribuzioni basate su 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

Spesso inserirò croni a livello di sistema che voglio eseguire in un momento specifico /etc/cron.danziché /etc/crontab, soprattutto se sono script più complessi.

Preferisco usare le directory in /etc/cron*quanto sono un posto molto più ovvio che altri amministratori di sistema sapranno guardare e i file qui possono essere gestiti tramite installazioni di pacchetti come rpme / o apt.

Protezione delle voci

Le directory che ho citato sono designate per inserire script che non verranno distrutti da un gestore di pacchetti. Se sei preoccupato di proteggere una voce crontab, sicuramente non la inserirò nel /etc/crontabfile, e invece la inserirò come uno script corretto in una delle /etc/cron*directory.


1

Vorrei scegliere # 4. Permette alle impostazioni di sistema di scegliere quando eseguire il lavoro e di solito fanno un buon lavoro di "esegui quando non occupato". La modifica dello scheduler cron di sistema avrebbe anche effetto automatico sul tempo di esecuzione dello script.

Il lato negativo è che non hai alcun controllo diretto su quando funziona. Se hai bisogno di un controllo più diretto, usa # 1.

È meno probabile che 1 venga sovrascritto da un aggiornamento del sistema. Sebbene 3 e 4 dovrebbero essere abbastanza sicuri. tutto dipende da come si aggiorna però. La tua distribuzione può essere aggiornata come vuole, ma solo 2 sarebbe in genere a rischio di sovrascrittura.

Infine, metterei gli script in / usr / local / bin Questo è il posto "normale" in cui inserisco le cose a livello di sistema non gestite dal gestore dei pacchetti della distro. / root / bin è accettabile anche se verrà eseguito solo da root. Tuttavia, questo è per lo più gusto.


0

Qualsiasi delle precedenti funzionerà e nessuna delle precedenti dovrebbe essere sovrascritta dagli aggiornamenti. La scelta effettiva si riduce all'opinione: ogni tre persone diverse avranno spesso almeno due se non tre risposte diverse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.