2015-10-21 12 views
10

mam około 50 serwerów Debiana ze złym cron praca:Jak usunąć zadanie cron z Ansible?

0 * * * * ntpdate 10.20.0.1 

chcę skonfigurować ntp synchronizację z ntpd i tak muszę usunąć tego crona. Do konfiguracji używam Ansible. Próbowałem usunąć wpis cron z tą grą:

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

Nic się nie stało.

Potem uruchomić tę grę:

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

widzę nową crona w wyjściu "crontab -l":

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

ale /etc/cron.d jest pusty! Nie rozumiem, jak działa moduł Ansible cron.

Jak mogę usunąć ręcznie skonfigurowane zadanie crona przy użyciu modułu cron Ansible? wpisy crontab

Odpowiedz

10

użytkownika odbywają się pod /var/spool/cron/crontab/$USER, jak wspomniano w crontab man page:

Crontab to program służący do montażu, demontażu lub tabel używanych do napędu cron (8) demon. Każdy użytkownik może mieć własny plik crontab i chociaż są to pliki w/var/spool /, nie są przeznaczone do bezpośredniej edycji. Dla SELinux w trybie MLS może być jeszcze więcej crontabów - dla każdego zakresu. Aby uzyskać więcej informacji zobacz selinux (8).

Jak wspomniano na stronie człowieka, a powyższy cytat, nie należy edytować/używanie tych plików bezpośrednio, a zamiast tego należy użyć dostępnych crontab poleceń takich jak crontab -l do listy wpisy crontab użytkownika, crontab -r do usunięcia crontab użytkownika lub crontab -e do edycji wpisów crontab użytkownika.

Aby usunąć wpis crontab ręcznie, można użyć polecenia crontab -r, aby usunąć wszystkie wpisy crontab użytkownika lub crontab -e, aby bezpośrednio edytować plik crontab.

Z ansibl można to zrobić za pomocą modułu cron na state: absent tak:

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

Jednak ta opiera się na komentarzu, że ansibl stawia wyżej wejścia crontab, które można zobaczyć z tego prostego zadania:

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

które następnie konfiguruje wpisu crontab, który wygląda tak:

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

Niestety, jeśli masz wpisy crontab, które zostały ustawione poza modułem cronu Ansible, będziesz musiał zastosować mniej czyste podejście do porządkowania wpisów w tekście.

Do tego będziemy po prostu musieli wyrzucić crontab naszego użytkownika za pomocą cron -r i możemy powoływać się to poprzez powłokę z gry, która wygląda mniej więcej tak:

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

Możemy wtedy użyć dodatkowych zadań, aby ustawić zadania, które chciałeś zachować lub dodać, prawidłowo wykorzystują moduł cron Ansible.