簡體   English   中英

使用 Ansible 刪除 cron

[英]Remove cron using Ansible

我正在嘗試從所有節點中刪除 cron 作業。 Ansible 腳本運行沒有任何錯誤,但它不會刪除 cron。

這是我的劇本

---
- hosts: all
  user: <user_name>
  tasks:
  - name: disable cron
    cron:
      name: clean
      env: yes
      state: absent
      user: root
    become: True

這是我在目標主機上的 cron。

[root@host1]# crontab -l

#Ansible: None
*/5 * * * * /root/cleanup.sh

#Ansible: None
*/5 * * * * /root/cleanup.sh

#Ansible: clean
*/5 * * * * /root/cleanup.sh

我嘗試將 name 替換為NoneAnsible: None#Ansible: Noneclean 他們都沒有工作。

如何刪除此 cron? 看起來冪等性不適用於 ansible 中的 cron 模塊,因為我運行了兩次放置 cron 並且它放置了兩次 cronjob。

這對我有用(都添加 cron 條目作為刪除):

- name: Enforce cron entries in variable files
  hosts: all
  become: true
  become_user: wls

  tasks:
  - name: "enforce crontab entries"
    cron:
      name: "{{ item.name }}"
      minute: "{{ item.minute| default('') }}"
      hour: "{{ item.hour| default('') }}"
      job: "{{ item.job| default('') }}"
      state: "{{ state | default('present') }}"
    loop: "{{ crontabentries }}"
    when:
    - crontabentries is defined
    - crontabentries| length > 0
    - item.state|default('present')  != 'absent'

  - name: enforce absence of entries
    cron:
      name: "{{ item.name }}"
      state: absent
    loop: "{{ crontabentries }}"
    when:
    - crontabentries is defined
    - crontabentries| length > 0
    - item.state|default('present')  == 'absent'

帶有要刪除的變量文件:

crontabentries:
-  name: "somecronjob"
   state: absent

或要添加的變量文件:(狀態 = 默認情況下存在,因此無需提及)

crontabentries:
-  name: "somecronjob"
   minute: "0"
   hour: "6"
   job: "find /var/log/*.log -mtime +30 -type f -delete"

定義env您要求刪除環境變量。

- name: disable cron
  cron:
    name: clean
    state: absent
    user: root
  become: True

看起來冪等性不適用於 Ansible 中的 cron 模塊

它工作正常,所以檢查你的代碼。 如果你有問題,你可以隨時在 SO 上提出另一個問題,但你需要包含代碼。

我為我嘗試了以下工作:

 ---
 - hosts: test
   become: true
   become_user: root
   any_errors_fatal: false
   tasks:

   - name: disable cron
     cron:
      name: "{{ item }}"
      state: absent
      user: root
      become: True
      with_items:
       - clean
       - None
       - None

我已經通過試運行檢查過它:ansible-playbook cronclean.yml --check

O/P 為: 在此處輸入圖片說明

如果您有非常復雜的 crontab 條目,您也可以通過 ansible 的 shell 模塊將其刪除,如下例所示。

---
- name: Deleting contab entry
  hosts: ecx
  become: true
  tasks:
   - name: "decroning entry"
     shell:
           "crontab -l -u root |grep -v mybot  |crontab -u root -"
     register: cronout
   - debug: msg="{{cronout.stdout_lines}}" 

說明:- 您只需將第 8 行的"mybot"字符串替換為您的 crontab 條目的唯一標識。 而已。 對於“ how to delete multiple crontab entries by ansible ”,您可以在grep中使用多個字符串,如下所示

"crontab -l -u root |grep -v 'strin1\|string2\|string3\|string4'  |crontab -u root -"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM