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

如何配置chrony在系统时钟同步跳变后自动触发执行自定义脚本

解决方案

方案1:使用chrony原生runonchange主动触发(推荐)

你使用的chrony 3.5版本原生支持runonchange配置指令,无需轮询,可在时间调整或同步状态变更时主动触发指定脚本/命令:

  1. 编辑chrony配置文件(通常为/etc/chrony.conf),添加如下配置,阈值可根据你的makestep 0.1规则调整为0.05秒即可覆盖所有跳变场景:
runonchange 0.05 /usr/local/bin/chrony_sync_hook.sh
  1. 编写触发脚本/usr/local/bin/chrony_sync_hook.sh,可按需补充同步状态判断、单次执行锁等逻辑避免重复触发:
#!/bin/bash
# 首次同步完成标记文件
LOCK_FILE="/var/run/chrony_first_sync_done"
[ -f "$LOCK_FILE" ] && exit 0

# 判断当前是否已完成有效同步
if chronyc tracking | grep -q "Leap status *: *Normal"; then
    # 替换为你要启动的服务或执行的自定义逻辑
    systemctl start your-target.service
    # 标记首次同步完成,后续时间调整不会再触发逻辑
    touch "$LOCK_FILE"
fi
  1. 赋予脚本执行权限,重启chronyd服务生效:
chmod +x /usr/local/bin/chrony_sync_hook.sh
systemctl restart chronyd

方案2:使用chronyc waitsync优化轮询逻辑

如果不需要监听后续同步状态变化,仅需要开机后等待首次同步完成再启动服务,可以使用chrony自带的waitsync命令替代手动轮询,资源占用更低:
在你的目标服务systemd unit文件中添加如下配置即可:

[Unit]
After=time-sync.target
Wants=time-sync.target

[Service]
# 0表示永久等待同步完成,适配GNSS长时间搜星场景
ExecStartPre=/usr/bin/chronyc waitsync 0
ExecStart=/path/to/your/service/binary

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:08