Disabilita in modo efficace lo script cron. {Orario, giornaliero, settimanale} specifico


25

Su vari sistemi che gestisco, ci sono script cron che vengono eseguiti tramite il /etc/cron.{hourly,daily,weekly}layout comunemente usato . Quello che voglio sapere è se esiste una funzionalità comune "disabilita questo script".

Ovviamente, la semplice eliminazione di qualcosa da una determinata directory lo disabiliterà, ma sto cercando una soluzione più permanente. L'eliminazione /etc/cron.daily/slocatefunzionerà per disabilitare il sistema notturno updatedbsul mio computer di casa (dove non uso mai slocate), ma la prossima volta che aggiorno il pacchetto slocate, sono abbastanza sicuro che riapparirà.

Le due distribuzioni che mi interessano di più sono Gentoo e OpenSUSE, ma spero che esista un meccanismo ampiamente implementato. Entrambe le distro come le ho io usano vixie-cron (non sono sicuro che sia importante).

Risposte:


45

Dovresti essere in grado di chmod -x scriptnamedisabilitare uno script ma lasciare il file in posizione.


5
Ciò potrebbe non essere annullato dal sistema di gestione dei pacchetti. Potresti renderlo più robusto facendo chattr +i scriptnamedopo chmod.
MC0e

@ mc0e grazie per avermi insegnato su file immutabili, ma come qualcuno ha detto una volta , fanno paura . Se mai dimenticassi ciò che ho fatto, ciò potrebbe portare a problemi molto frustranti.
Jonathan Y.

2
@JonathanY .: Ecco a cosa lsattrserve - rimuovere lo spaventoso (elenca le atteibutes di un file).
In pausa fino a nuovo avviso.

1
DW certo, ma sapere di guardare gli attributi del file quando qualcosa va inspiegabilmente storto (proprio come in quel thread a cui mi sono collegato) è il vero calcio qui.
Jonathan Y.

@JonathanY. Quindi ora lo sai. :-) In ogni caso, penso che il bit "spaventoso" in quel thread collegato si riferisca a un bug pacman, non a chattr stesso
mc0e

9

run-parts non esegue i lavori che hanno un punto nel loro nome, quindi

mv /etc/cron.d/job /etc/cron.d/job.disabled

farà il trucco.


1
Sfortunatamente questo avrà lo stesso problema durante l'aggiornamento del programma: controllerà se il processo cron esiste e, poiché non esiste con il suo nome originale, verrà ricreato.
Jenny D dice di reintegrare Monica

2
Tornare indietro quando si aggiorna il programma è un effetto collaterale dello strumento pacchetto in uso, non può essere risolto con mezzi semplici e non è colpa di Cron. Alcuni sistemi di pacchetti eseguono il nuke e aprono i file precedenti, altri differiscono quelli vecchi e nuovi e ti chiedono se ci sono modifiche da rivedere. Indipendentemente da ciò, gli aggiornamenti che producono comportamenti involontari dovrebbero essere una parte frustrante, ma di routine dell'amministrazione dei sistemi unix a questo punto. Esistono semplicemente troppi pacchetti che si spostano troppo rapidamente per rivedere regolarmente tutte le modifiche per il loro impatto in ogni singolo ambiente.
Peelman,

In Debian, esiste una nozione di diversione dei file , ovvero si è in grado di rinominare efficacemente il file mentre è ancora gestito dal gestore dei pacchetti. Forse esiste un meccanismo simile in Gentoo e / o SUSE?
Bass

9

Di solito cron.dailyviene invocato tramite /etc/crontabuna linea come ad es

run-parts --report /etc/cron.daily

man run-parts ti dà le opzioni.

run-parts --test /etc/cron.daily mostra quali lavori vengono eseguiti senza eseguirli.

Preferisco fare una sottodirectory "Disabilitato" e spostare lì i miei lavori.

In ogni caso, se si aggiorna un pacchetto, è probabile che il lavoro venga nuovamente inserito o che i bit "x" rimossi vengano ripristinati


1

Puoi rimuovere il pacchetto slocate se non lo usi mai.


Questo era solo un esempio, ma comunque un buon consiglio, grazie. (Pensavo che qualcosa potesse dipendere da slocate, ma nulla sembra farlo.)
benizi,

Rimuovere slocate e installare invece mlocate. Molto meglio.
mc0e

1

Se usi cfengine ( https://cfengine.com/ ) puoi farlo con disabilita. Devi solo scrivere un file promessa per un gruppo di host e si applicherà alla prossima esecuzione di cfagent. Farlo con il burattino o lo chef o qualsiasi altra cosa dovrebbe anche essere abbastanza semplice.


Interessante. Ho riscontrato solo tangenzialmente strumenti di gestione della configurazione. Stavo cercando una soluzione generale "Ho qualche sistema arbitrario simile a Unix".
benizi,

1

Il /etc/cron.daily et. al. gli script sono eseguiti da uno script chiamato run-parts. Tale sceneggiatura varia. Ad esempio, l'opzione --test sopra menzionata non è sulla macchina che sto usando in questo momento.

Run-parts è uno script bash. È uno strumento generalmente utile per l'esecuzione di tutti gli script nella directory fornita come argomento. Di solito si trova in / usr / bin / run-parts.

Ha un groviglio di logica per decidere cosa eseguire. Quel codice contiene la risposta alla tua domanda, ma varia anche. Quindi devi leggere il codice per sicurezza.

Nella versione che sto guardando ha una logica che, quando si lavora sulla directory <foo>, controlla <foo> /jobs.deny. Se esiste, rifiuta di eseguire qualsiasi script menzionato in quel file su una riga, da solo. Supponendo che tu abbia questa funzionalità è fantastico perché continuerà a funzionare quando il pacchetto che viene installato viene installato o aggiornato.


0

Se si ha a che fare con RHEL e derivati ​​(che fornisce il crontabspacchetto), è possibile disabilitare esplicitamente un lavoro inserendone il nome nel jobs.denyfile.

Dalla pagina man crontabs / run-parts :

L'esecuzione di file può essere consentita o negata creando il file jobs.allow o jobs.deny che ha funzionato in modo simile ad altri file di configurazione di permessi / negazioni. Il file deve essere creato nella directory specificata.

Esempio /etc/cron.daily/jobs.deny potrebbe contenere ad esempio 0logwatch che proibisce l'esecuzione di questo script.


-1

Se non vuoi nemmeno i crontab utente, disabilita semplicemente crond nel tuo elenco di servizi.

In Debian e versioni basate su Debian si tratta semplicemente di rimuovere il collegamento simbolico dall'appropriato /etc/rcX.d (per runlevel X).

Non so come gestisci i servizi in SUSE o Gentoo.


4
Questa è solo una cattiva idea. La disabilitazione del cron disattiverà del tutto le attività di manutenzione utili come logrotate, updatedb, possibilmente aggiornamenti non presidiati e backup standard.
Tobu,

Updatedb è esattamente il compito che sto cercando di disabilitare (aggiorna il db per slocate). Tuttavia, sì, cattivo consiglio in generale.
benizi,

Oh scusa. Ho letto male la tua domanda e ho pensato che volessi disabilitare TUTTI i cronjob specifici del sistema, non uno specifico.
jishi,
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.