一分鐘學會 Ansible cron 模塊,高效管理你的定時任務
Cron是Linux系統(tǒng)中一個非常實用的定時任務工具,而Ansible的cron模塊則為我們提供了一種簡便且高效的方式來管理目標主機上的定時任務。在這篇文章中,我們將深入探討cron模塊的使用方法,并通過一些實際例子來展示如何利用它來輕松管理定時任務。

一、cron模塊的主要功能
Ansible的cron模塊可以用來:
- 創(chuàng)建新的定時任務。
 - 修改現(xiàn)有任務。
 - 刪除任務。
 
通過cron模塊,可以輕松實現(xiàn)對目標主機crontab的自動化管理,而無需手動登錄服務器進行配置。
二、cron模塊的常用參數(shù)
參數(shù)  | 描述  | 類型  | 必填  | 
name  | 定時任務的描述,便于區(qū)分任務  | 字符串  | 是  | 
minute  | 定義任務的分鐘字段,支持通配符和范圍  | 字符串  | 否  | 
hour  | 定義任務的小時字段,支持通配符和范圍  | 字符串  | 否  | 
day  | 定義任務的日期字段,支持通配符和范圍  | 字符串  | 否  | 
month  | 定義任務的月份字段,支持通配符和范圍  | 字符串  | 否  | 
weekday  | 定義任務的星期字段,支持通配符和范圍  | 字符串  | 否  | 
job  | 要執(zhí)行的命令  | 字符串  | 是  | 
state  | 定義任務狀態(tài),可選值為present或absent  | 字符串  | 否  | 
user  | 指定執(zhí)行任務的用戶  | 字符串  | 否  | 
disabled  | 是否禁用任務,yes或no  | 布爾值  | 否  | 
insertafter  | 插入任務的位置,在指定文本之后  | 字符串  | 否  | 
insertbefore  | 插入任務的位置,在指定文本之前  | 字符串  | 否  | 
三、cron模塊的基本使用
1. 創(chuàng)建一個定時任務
這個示例將幫助你在目標主機上設置一個定時任務,該任務會在每天凌晨2點自動運行 /usr/bin/backup.sh 腳本。你可以選擇使用 ansible-playbook 或者 ad-hoc 的方式來完成這個設置。
ansible node1 -m cron -a \
"name='每日備份任務' minute='0' hour='2' job='/usr/bin/backup.sh' state=present"- node1:表示對node1組的主機執(zhí)行,可以替換為特定的主機組名(如webservers)。
 - -m:指定使用的模塊為cron。
 - -a:后面跟的是模塊所需的參數(shù),以空格分隔。
 - 參數(shù)內的值用引號括起來(如name='每日備份任務'),以避免解析問題。
 
成功執(zhí)行上述命令后,會輸入如下結果:

以下語法是采用ansible-playbook的語法創(chuàng)建定時任務的方式:
- name: 添加定時任務
  ansible.builtin.cron:
    name: “每日備份任務”
    minute: "0"
    hour: "2"
    job: "/usr/bin/backup.sh"
    state: present2. 刪除一個定時任務
通過設置state為absent,可以刪除指定的定時任務。執(zhí)行如下命令:
ansible node1 -m cron -a  "name='每日備份任務'  state=absent"成功執(zhí)行上述命令后,會把名字為每日備份任務的定時任務刪除,如下所示:

3. 禁用一個定時任務
設置disabled為yes可以暫時禁用任務。執(zhí)行如下命令:
ansible node1 -m cron -a "name='每日備份任務' job='/usr/bin/backup.sh' disabled=yes"執(zhí)行成功如下圖所示:

以下語法是采用ansible-playbook的語法創(chuàng)建定時任務的方式:
- name: 禁用每日備份任務
  ansible.builtin.cron:
    name: "每日備份任務"
    job: "/usr/bin/backup.sh"
    disabled: yes4. 使用復雜的時間表達式
可以使用minute、hour等參數(shù)定義更復雜的定時任務時間。執(zhí)行如下命令:
ansible node1 -m cron -a \
"name='每日備份任務'  minute='0' hour='*/1' weekday='1-5' job='/usr/bin/work_task.sh'"執(zhí)行成功后如下:

以下語法是采用ansible-playbook的語法創(chuàng)建定時任務的方式:
- name: 每周一到周五每小時執(zhí)行
  ansible.builtin.cron:
    name: "工作日任務"
    minute: "0"
    hour: "*/1"
    weekday: "1-5"
    job: "/usr/bin/work_task.sh"5. 為特定用戶創(chuàng)建任務
如果需要為非root用戶創(chuàng)建任務,可以使用user參數(shù)。執(zhí)行如下命令:
ansible node1 -m cron -a \
"name='用戶任務'  minute='30' hour='10' user='john' job='/home/john/run_me.sh'"執(zhí)行成功如下圖所示:

- name: 為用戶john創(chuàng)建任務
  ansible.builtin.cron:
    name: "用戶任務"
    minute: "30"
    hour: "10"
    job: "/home/john/run_me.sh"
    user: "john"四、cron模塊的注意事項
- 任務的唯一性:name參數(shù)是任務的唯一標識,確保每個任務具有唯一的name以避免覆蓋。
 - 權限問題:使用user參數(shù)時,確保目標用戶有權限執(zhí)行指定任務。
 - 命令路徑:job參數(shù)中的命令最好寫絕對路徑,避免因環(huán)境變量問題導致任務失敗。
 - 驗證任務:在任務執(zhí)行后,可登錄目標主機并使用crontab -l查看任務是否正確配置。
 
五、綜合示例
以下是一個完整的任務列表,包含創(chuàng)建、修改和刪除任務的操作:
- name:管理定時任務
hosts:all
tasks:
    -name:創(chuàng)建每日備份任務
      ansible.builtin.cron:
        name:"每日備份任務"
        minute:"0"
        hour:"2"
        job:"/usr/bin/backup.sh"
        state:present
    -name:修改每日備份任務時間為凌晨3點
      ansible.builtin.cron:
        name:"每日備份任務"
        minute:"0"
        hour:"3"
        job:"/usr/bin/backup.sh"
    -name:刪除舊的日志清理任務
      ansible.builtin.cron:
        name:"日志清理任務"
        state:absent六、總結
通過Ansible的cron模塊,可以輕松實現(xiàn)對定時任務的自動化管理。無論是添加、修改還是刪除任務,都可以通過簡單的YAML文件完成。熟練使用cron模塊,可以有效提升工作效率,減少手動操作帶來的錯誤。















 
 
 







 
 
 
 