一分钟学会Ansible cron模块,高效管理你的定时任务
Cron
是Linux
系统中一个非常实用的定时任务工具,而Ansible
的cron
模块则为我们提供了一种简便且高效的方式来管理目标主机上的定时任务。在这篇文章中,我们将深入探讨cron
模块的使用方法,并通过一些实际例子来展示如何利用它来轻松管理定时任务。
cron
模块的主要功能
Ansible
的cron
模块可以用来:
- 创建新的定时任务。
- 修改现有任务。
- 删除任务。
通过cron
模块,可以轻松实现对目标主机crontab
的自动化管理,而无需手动登录服务器进行配置。
cron
模块的常用参数
参数 | 描述 | 类型 | 必填 |
---|---|---|---|
name | 定时任务的描述,便于区分任务 | 字符串 | 是 |
minute | 定义任务的分钟字段,支持通配符和范围 | 字符串 | 否 |
hour | 定义任务的小时字段,支持通配符和范围 | 字符串 | 否 |
day | 定义任务的日期字段,支持通配符和范围 | 字符串 | 否 |
month | 定义任务的月份字段,支持通配符和范围 | 字符串 | 否 |
weekday | 定义任务的星期字段,支持通配符和范围 | 字符串 | 否 |
job | 要执行的命令 | 字符串 | 是 |
state | 定义任务状态,可选值为present 或absent | 字符串 | 否 |
user | 指定执行任务的用户 | 字符串 | 否 |
disabled | 是否禁用任务,yes 或no | 布尔值 | 否 |
insertafter | 插入任务的位置,在指定文本之后 | 字符串 | 否 |
insertbefore | 插入任务的位置,在指定文本之前 | 字符串 | 否 |
cron
模块的基本使用
创建一个定时任务
这个示例将帮助你在目标主机上设置一个定时任务,该任务会在每天凌晨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组的主机执行,可以替换为特定的主机组名(如webservers
)。
-m
:指定使用的模块为cron
。
-a
:后面跟的是模块所需的参数,以空格分隔。参数内的值用引号括起来(如
name='每日备份任务'
),以避免解析问题。
成功执行上述命令后,会输入如下结果:
以下语法是采用ansible-playbook
的语法创建定时任务的方式:
- name: 添加定时任务
ansible.builtin.cron:
name: “每日备份任务”
minute: "0"
hour: "2"
job: "/usr/bin/backup.sh"
state: present
删除一个定时任务
通过设置state
为absent
,可以删除指定的定时任务。执行如下命令:
ansible node1 -m cron -a "name='每日备份任务' state=absent"
成功执行上述命令后,会把名字为每日备份任务的定时任务删除,如下所示:
禁用一个定时任务
设置disabled
为yes
可以暂时禁用任务。执行如下命令:
ansible node1 -m cron -a "name='每日备份任务' job='/usr/bin/backup.sh' disabled=yes"
执行成功如下图所示:
以下语法是采用ansible-playbook
的语法创建定时任务的方式:
- name: 禁用每日备份任务
ansible.builtin.cron:
name: "每日备份任务"
job: "/usr/bin/backup.sh"
disabled: yes
使用复杂的时间表达式
可以使用minute
、hour
等参数定义更复杂的定时任务时间。执行如下命令:
ansible node1 -m cron -a \
"name='每日备份任务' minute='0' hour='*/1' weekday='1-5' job='/usr/bin/work_task.sh'"
执行成功后如下:
以下语法是采用ansible-playbook
的语法创建定时任务的方式:
- name: 每周一到周五每小时执行
ansible.builtin.cron:
name: "工作日任务"
minute: "0"
hour: "*/1"
weekday: "1-5"
job: "/usr/bin/work_task.sh"
为特定用户创建任务
如果需要为非root
用户创建任务,可以使用user
参数。执行如下命令:
ansible node1 -m cron -a \
"name='用户任务' minute='30' hour='10' user='john' job='/home/john/run_me.sh'"
执行成功如下图所示:
- name: 为用户john创建任务
ansible.builtin.cron:
name: "用户任务"
minute: "30"
hour: "10"
job: "/home/john/run_me.sh"
user: "john"
cron
模块的注意事项
-
任务的唯一性:
name
参数是任务的唯一标识,确保每个任务具有唯一的name
以避免覆盖。 -
权限问题:使用
user
参数时,确保目标用户有权限执行指定任务。 -
命令路径:
job
参数中的命令最好写绝对路径,避免因环境变量问题导致任务失败。 -
验证任务:在任务执行后,可登录目标主机并使用
crontab -l
查看任务是否正确配置。
综合示例
以下是一个完整的任务列表,包含创建、修改和删除任务的操作:
- name: 管理定时任务
hosts: all
tasks:
- name: 创建每日备份任务
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
模块,可以轻松实现对定时任务的自动化管理。无论是添加、修改还是删除任务,都可以通过简单的YAML
文件完成。熟练使用cron
模块,可以有效提升工作效率,减少手动操作带来的错误。
推荐阅读
- 打造更安全的Linux系统:玩转PAM配置文件
- Ansible实战:如何正确选择command和shell模块?
- 运维效率倍增!Ansible Copy 模块必知必会操作
- 如何在Ansible中轻松实现复杂SSH跳转?这个参数搞定
- Ansible Setup模块实战,如何使用Setup模块收集主机信息
- 从入门到精通:Ansible Shell 模块的应用与最佳实践