2012-12-23 6 views
10

C'è un modo per abilitare e disabilitare le attività di Crontab usando Bash/Shell?Abilita/disabilita le attività in Crontab per Bash/Shell

Quindi, quando l'utente avvia il server 1, abiliterà la linea Crontab del server 1 e così via. E quando l'utente interrompe il Server 1, la linea Crontab del Server 1 viene disabilitata (#). E 'possibile e come?

Grazie in anticipo

*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

È possibile utilizzare una directory sentinella per essere utilizzata da tutti gli script e controllare in ogni script se la sentinella che si aspettano è qui - e in caso contrario, interrompere l'esecuzione – fge

risposta

14
SERVERNUM=$1 

Per attivare:

crontab -l | sed "/^#.*Server $SERVERNUM check/s/^#//" | crontab - 

Per disattivare:

crontab -l | sed "/^[^#].*Server $SERVERNUM check/s/^/#/" | crontab - 

Trascrizione:

[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^[^#].*Server 1 check/s/^/#/' | crontab - 
[email protected]$ crontab -l 
#*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^#.*Server 1 check/s/^#//' | crontab - 
[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

Non sembra aggiungere/rimuovere un # in il crontab. On = */1 * * * * Controllo server 1 Off = # */1 * * * * Controllo server 1 – user1621988

+0

L'ho appena provato sul mio sistema e ha funzionato. – Barmar

+0

Wonderfull, funziona, l'unico problema con cui sto affrontando è rendere il numero Server dinamico in Bash, il problema è che #. * Controllo $ 1 del server non funziona, o "$ 1". Quindi, come faccio a passare $ 1 variabile nei numeri? – user1621988

2

Suggerisco di aggiungere i lavori cron a /etc/cron.d per ogni script di uno server. Quindi lascia che lo script di cron esegua la scansione di alcuni file marker se il cron job deve essere eseguito.

+0

Un altro accordo comune è avere una directory '/ path/to/servers' e quindi solo un cron job con' run-parts/path/to/servers'. Quindi disabilitando un server si annota per rinominare o rimuovere il suo file nella directory 'servers'. ('run-parts' è specifico per Debian, ma se la tua piattaforma non lo è, non è difficile eseguire il rollover.) – tripleee

0

questa è una variante, io uso un cronjob che lo carica ogni notte. Ho appena modificato un file e viene ricaricato alle 22:00 ogni sera. Potresti far ricaricare la ricarica più spesso. Tengo una directory di file per ciascuno dei nodi. Il trucco è assicurarsi che nessuno commenta la linea di ricarica.

0 22 * * * crontab /home/ME/cron_files/NODE 
0

Come soluzione rapida e sporca, è possibile abilitare o disabilitare il permesso di esecuzione dello script cron appropriato.

E.g. se ti piace per evitare individuare di aggiornare automaticamente il proprio database (che può essere di I/O che consumano):

cd /etc/cron.daily 

sudo chmod a-x locate 

Questo può essere contro il quadro cron, ma si è rapidamente applicato e funziona in caso di necessità immediate.