You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Ansible Playbook实现每10秒执行一次Cron任务?

当然可以搞定!不过得先给你提个醒:Cron本身的最小执行间隔是1分钟,所以直接用Cron设置每10秒跑一次是行不通的,得用点小技巧。下面给你两种靠谱的方案,附完整的Ansible Playbook示例:

方案1:单Cron任务+循环脚本

这个方案的思路是:创建一个每分钟执行一次的Cron任务,任务里跑一个shell脚本,脚本会循环6次,每次执行你要的目标命令后sleep 10秒。这样一分钟内就刚好每10秒触发一次。

Playbook示例:

- name: Setup 10-second interval cron job via loop script
  hosts: your_target_hosts
  become: yes
  tasks:
    - name: Create the loop script
      copy:
        dest: /usr/local/bin/every_10s_task.sh
        content: |
          #!/bin/bash
          # Loop 6 times (once every 10s for 1 minute)
          for i in {1..6}; do
              # Replace this line with your actual command to run
              echo "Running task at $(date)" >> /var/log/every_10s_task.log
              sleep 10
          done
        mode: '0755'

    - name: Add cron job to run the script every minute
      cron:
        name: "Every 10 seconds task"
        minute: "*"
        hour: "*"
        day: "*"
        month: "*"
        weekday: "*"
        job: "/usr/local/bin/every_10s_task.sh"
        user: root

简单解释:

  • 先创建了一个可执行的shell脚本,里面循环6次,每次执行目标命令(这里用echo日志做示例,你换成自己的命令就行),然后sleep 10秒。
  • 再用Ansible的cron模块添加一个每分钟执行一次的任务,调用这个脚本。

方案2:创建6个独立Cron任务

另一种更直接的思路是:创建6个Cron任务,分别在每分钟的0、10、20、30、40、50秒触发。这样每个任务间隔10秒,整体就实现了每10秒执行一次的效果。

Playbook示例:

- name: Setup 10-second interval cron jobs via 6 separate entries
  hosts: your_target_hosts
  become: yes
  tasks:
    - name: Add 6 cron jobs for 10-second intervals
      cron:
        name: "Every 10s task at {{ item }} seconds"
        minute: "*"
        hour: "*"
        day: "*"
        month: "*"
        weekday: "*"
        job: "echo 'Running task at $(date)' >> /var/log/every_10s_task.log"  # 替换为你的实际命令
        user: root
        second: "{{ item }}"
      loop:
        - 0
        - 10
        - 20
        - 30
        - 40
        - 50

注意:这个方案依赖Ansible的cron模块支持second参数,需要确保你的Ansible版本足够新(大概2.11及以上),同时目标系统的Cron服务支持秒级调度(比如cronie或者fcron,传统的Vixie Cron不支持秒级)。如果目标系统用的是传统Cron,可能还是方案1更稳妥。

一些实用提醒

  • 绝对路径优先:不管用哪种方案,你的目标命令最好用绝对路径(比如/usr/bin/your_command),避免Cron环境变量不全导致命令找不到。
  • 防止并发叠加:如果你的目标命令执行时间可能超过10秒,方案1里的循环会导致多个进程同时运行,这时候可以给脚本加个锁(比如用flock),避免冲突。
  • 日志辅助排查:建议把命令的输出重定向到日志文件,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Akdim Karim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:09:17