2015-10-21 11 views
10

Ho circa 50 server Debian Linux con un job cron cattivo:Come eliminare un cron job con Ansible?

0 * * * * ntpdate 10.20.0.1 

Voglio configurare la sincronizzazione NTP con ntpd e quindi ho bisogno di cancellare questo lavoro cron. Per la configurazione utilizzo Ansible. Ho provato a eliminare la voce cron con questa riproduzione:

tasks: 
    - cron: name="ntpdate" minute="0" job="ntpdate 10.20.0.1" state=absent user="root" 

Non è successo niente.

Allora faccio funzionare questo gioco:

tasks: 
    - cron: name="ntpdate" minute="0" job="ntpdate pool.ntp.org" state=present 

vedo nuovo lavoro di cron in uscita di "crontab -l":

... 
# m h dom mon dow command 
    0 * * * *  ntpdate 10.20.0.1 
#Ansible: ntpdate 
0 * * * * ntpdate pool.ntp.org 

ma /etc/cron.d è vuoto! Non capisco come funziona il modulo cron di Ansible.

Come posso cancellare il mio cron job configurato manualmente con il modulo cron di Ansible? crontab

risposta

10

dell'utente sono tenute sotto /var/spool/cron/crontab/$USER, come indicato nel crontab man page:

Crontab è il programma utilizzato per installare, rimuovere o elencare le tabelle utilizzate per guidare il cron (8) daemon. Ogni utente può avere il proprio crontab, e sebbene questi siano file in/var/spool /, non sono pensati per essere modificati direttamente. Per SELinux in modalità mls possono essere anche più crontabs - per ogni gamma. Per ulteriori informazioni, vedere selinux (8).

Come accennato nella pagina di manuale, e la citazione di cui sopra, non si dovrebbe essere modifica/utilizzare questi file direttamente e invece dovrebbero utilizzare i crontab comandi disponibili come crontab -l per elencare crontab dell'utente, crontab -r per rimuovere il crontab dell'utente o crontab -e per modificare le voci crontab dell'utente.

Per rimuovere una voce crontab a mano è possibile utilizzare crontab -r per rimuovere tutte le voci crontab dell'utente o crontab -e per modificare direttamente il crontab.

Con Ansible questo può essere fatto utilizzando il modulo cron del state: absent in questo modo:

hosts : all 
tasks : 
    - name : remove ntpdate cron entry 
    cron : 
     name : ntpdate 
     state : absent 

Tuttavia, questo si basa sul commento che Ansible pone al di sopra della voce di crontab che può essere visto da questa semplice operazione:

hosts : all 
tasks : 
    - name : add crontab test entry 
    cron : 
     name : crontab test 
     job : echo 'Testing!' > /var/log/crontest.log 
     state : present 

che poi imposta una voce di crontab che assomiglia:

#Ansible: crontab test 
* * * * * echo Testing > /var/log/crontest.log 

Sfortunatamente se si hanno voci di crontab che sono state impostate al di fuori del modulo cron di Ansible, allora si dovrà adottare un approccio meno pulito per riordinare le voci di crontab.

Per questo avremo semplicemente buttare via crontab del nostro utente utilizzando cron -r e possiamo invocare questa via il guscio con un gioco che sembra qualcosa di simile:

hosts : all 
tasks : 
    - name : remove user's crontab 
    shell : crontab -r 

Possiamo quindi utilizzare altri compiti per impostare le attività che si desidera mantenere o aggiungere che utilizzano correttamente il modulo cron di Ansible.