Ansible cron
模块
一、简介
- 功能:
cron
模块用于在远程主机上管理定时任务(Cron Jobs)。它可以创建、修改、删除 Cron 任务,确保指定任务在预定时间自动执行。 - 使用场景:常用于自动化配置系统任务调度,如定期备份、日志清理、系统监控等操作,确保这些任务在指定的时间周期内执行。
二、基本用法
2.1 语法
ansible <pattern> -m cron -a "name=<job_name> <cron_options>"
<pattern>
:指定要操作的主机或主机组,例如all
、webservers
。-m cron
:指定使用cron
模块。name=<job_name>
:指定 Cron 任务的名称(用于标识和管理任务)。<cron_options>
:指定任务的执行计划和具体操作(如命令、时间设置等)。
三、使用示例
3.1 创建一个 Cron 任务
ansible all -m cron -a "name='backup script' minute=0 hour=2 job='/usr/local/bin/backup.sh'"
- 解释:在所有主机上创建一个名为 “backup script” 的 Cron 任务,设置为每天凌晨 2 点执行
/usr/local/bin/backup.sh
脚本。
3.2 删除一个 Cron 任务
ansible all -m cron -a "name='backup script' state=absent"
- 解释:在所有主机上删除名为 “backup script” 的 Cron 任务。
3.3 创建一个任务,每 15 分钟执行一次
ansible all -m cron -a "name='log rotate' minute='*/15' job='/usr/sbin/logrotate'"
- 解释:在所有主机上创建一个名为 “log rotate” 的任务,每 15 分钟执行一次
/usr/sbin/logrotate
命令。
3.4 创建一个每周一凌晨 3 点执行的任务
ansible all -m cron -a "name='weekly cleanup' minute=0 hour=3 day_of_week=1 job='/usr/local/bin/cleanup.sh'"
- 解释:在所有主机上创建一个名为 “weekly cleanup” 的任务,每周一凌晨 3 点执行
/usr/local/bin/cleanup.sh
脚本。
3.5 创建一个 Cron 任务并指定用户
ansible all -m cron -a "name='check disk' minute=0 hour=1 user=root job='/usr/local/bin/check_disk.sh'"
- 解释:在所有主机上以
root
用户的身份创建一个名为 “check disk” 的任务,每天凌晨 1 点执行/usr/local/bin/check_disk.sh
脚本。
四、常用选项
4.1 minute
, hour
, day
, month
, day_of_week
-
功能:设置 Cron 任务的时间安排。
minute
:任务在每小时的第几分钟执行(0-59)。hour
:任务在每天的第几个小时执行(0-23)。day
:任务在每月的第几天执行(1-31)。month
:任务在每年的第几个月执行(1-12)。day_of_week
:任务在每周的第几天执行(0-7,0 和 7 表示星期日)。
-
示例:
ansible all -m cron -a "name='daily task' minute=0 hour=0 job='/usr/local/bin/daily.sh'"
- 解释:在所有主机上创建一个名为 “daily task” 的任务,每天午夜(00:00)执行
/usr/local/bin/daily.sh
。
- 解释:在所有主机上创建一个名为 “daily task” 的任务,每天午夜(00:00)执行
4.2 job
- 功能:指定要执行的命令或脚本。
- 示例:
ansible all -m cron -a "name='system update' minute=30 hour=2 job='/usr/bin/yum update -y'"
- 解释:在所有主机上创建一个名为 “system update” 的任务,每天凌晨 2:30 执行
yum update -y
命令。
- 解释:在所有主机上创建一个名为 “system update” 的任务,每天凌晨 2:30 执行
4.3 state
- 功能:控制 Cron 任务的状态。设置为
present
表示任务存在,absent
表示删除任务。 - 示例:
ansible all -m cron -a "name='system update' state=absent"
- 解释:在所有主机上删除名为 “system update” 的任务。
4.4 user
- 功能:指定要在其下运行 Cron 任务的用户。默认情况下,任务在当前用户(通常是
root
)下运行。 - 示例:
ansible all -m cron -a "name='user backup' minute=0 hour=1 user=backup job='/home/backup/backup.sh'"
- 解释:在所有主机上以
backup
用户的身份创建一个名为 “user backup” 的任务,每天凌晨 1 点执行/home/backup/backup.sh
脚本。
- 解释:在所有主机上以
4.5 cron_file
- 功能:指定存放 Cron 任务的文件。默认情况下,任务会存储在
/etc/cron.d
或用户的 Cron 表中。 - 示例:
ansible all -m cron -a "name='custom task' minute=15 hour=10 job='/usr/local/bin/task.sh' cron_file='custom_crontab'"
- 解释:将 “custom task” 任务存放在
custom_crontab
文件中,每天上午 10:15 执行/usr/local/bin/task.sh
。
- 解释:将 “custom task” 任务存放在
五、注意事项
- 时间设置:使用
minute
、hour
、day
、month
和day_of_week
时,确保任务的执行时间符合预期。使用*
作为通配符表示任意时间,如minute='*/15'
表示每 15 分钟执行一次。 - 任务冲突:在同一时间内安排多个任务时,确保它们不会相互冲突,尤其是涉及资源密集型操作时。
- 用户权限:如果需要以特定用户身份运行任务,确保该用户有权限执行指定的命令或脚本,并使用
user
选项明确指定。