#!/bin/sh # # S45meow_ntpsync — 开机网络校时(M22) # # 只负责把同步器丢到后台并**立即返回**,开机关键路径增加 0 秒。 # 真正的「等网络就绪 + 有限重试 + 总超时」全在 /usr/bin/meow_ntpsync 里。 # # 为什么排 S45:S40network 只 ifup 了 lo,WiFi 由 S43 之后才起来,租约更晚, # 所以本脚本启动时大概率还没有网络——同步器自己轮询默认路由(最多 -t 秒)。 # WiFi 在更晚(用户手动连)才就绪的情况,由 udhcpc 钩子 # /usr/share/udhcpc/default.script.d/50meow_ntpsync 在拿到租约时再触发一次。 # # 失败不阻断 init:所有分支都 exit 0(除非参数错误)。 # case "$1" in start) printf "Starting meow_ntpsync: " [ -x /usr/bin/meow_ntpsync ] || { echo "SKIP (not installed)"; exit 0; } setsid /usr/bin/meow_ntpsync -b -t 120 >/dev/null 2>&1 & echo "OK" ;; stop) printf "Stopping meow_ntpsync: " # 持锁者自证在 <锁目录>/ 子目录里;kill 前再核对 cmdline, # 防止 pid 复用误杀无关进程(P2-1 顺带项) for d in /tmp/meow_ntpsync.lock/*; do [ -d "$d" ] || continue pid=${d##*/} case "$pid" in ''|*[!0-9]*) continue ;; esac cmd=$(tr '\0' ' ' <"/proc/$pid/cmdline" 2>/dev/null) case "$cmd" in *meow_ntpsync*) kill "$pid" 2>/dev/null ;; esac done echo "OK" ;; restart|reload) "$0" stop "$0" start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0