Debian 时间同步处理

1.NTP授时的基本框架

时间同步在Debian环境使用NTP服务实现,在Debian平台,NTP是一个双向的协议------Debian,linux在设计时与git类似,有去中心化的考量。一些拥有固定IP的Debian设备,Debian鼓励这些用户加入NTP 服务池,以为更多非固定IP设备提供授时服务。

授时服务的主配置文件在/etc/ntp.conf中。普通用户需要关注的修改位置只有两处:

复制代码
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server ntp.aliyun.com

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst

整个ntp授时是个层级式的结构:

server <ip>的优先级更高

pool <ip> <args>优先级稍低

启动时linux会尝试依次和层级结构里的授时服务器进行时间同步。

2.对NTP配置文件的可编程修改

2.1参见例程

python 复制代码
#!/bin/bash
# 获取当前脚本文件所在的目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
cd $SCRIPT_DIR

# 获取脚本所在的目录
script_dir=$(dirname "$0")
# 切换至应用程序所在的目录(相对cfg_daemon)
echo $script_dir
cd "$script_dir/.." || exit


# JSON文件路径
json_file="cfg/device_private.json"
# 使用jq解析JSON文件
# JSON文件路径
json_file="cfg/daemon_mqtt_message.json"
app_json_file=$(jq -r ".json_file" $json_file)

json_file=$app_json_file
ntp_server=$(jq -r ".hardware.ntp_server" $json_file)

#step 1. clear all ntpserver in ntp.conf
# 定义文件名
file_name="/etc/ntp.conf"
# 临时文件名
temp_file="ntp.conf.tmp"
# 使用sed命令删除文件中的 "server=" 字符串,并将结果写入临时文件
sed '/^server /d' $file_name > $temp_file
# 把新的配置加入
sed "/^#server ntp\.your-provider\.example$/a\server $ntp_server" $temp_file > $temp_file.new
sudo mv $temp_file.new $temp_file
# 将临时文件替换原始文件
sudo mv $temp_file $file_name
echo "ntp server has modified yet! $ntp_server"

脚本运行的结果,会把 增补上的ntp 服务器插入最高优先级的位置:

You do need to talk to an NTP server or two (or three).

#server ntp.your-provider.example

server ntp.aliyun.com

pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will

pick a different set every time it starts up. Please consider joining the

pool: <http://www.pool.ntp.org/join.html\>

pool 0.debian.pool.ntp.org iburst

pool 1.debian.pool.ntp.org iburst

2.2 例程说明

  • 处理了.sh脚本与外部配置文件的相对路径
  • 上面的配置文件实际有两级,这是将工程细分为子项目的标准实现。
  • 修改/etc/ntp.conf时使用sed进行。
    • 首先删除掉文件里的所有server 打头的配置项
    • 然后将新的配置插入到文件的特定标志行的次一行
      • 那个特定标志行是标准的/etc/ntp.conf中的一个注释行:

#server ntp.your-provider.example

附录A python调用涉及特权指令的.sh脚本的方法

python 复制代码
#执行某个外部脚本.sh
def Invoke_Script(script_releated_path):
    sh_path = os.path.join(project_path, script_releated_path)
    if(os.path.exists(sh_path)):
        subprocess.run(f'sudo {sh_path}', shell=True, check=False)
        return True
    return False
相关推荐
liu****26 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
池央39 分钟前
CANN 诊断工具链深度解析:oam-tools 的自动化故障信息收集、软硬件状态快照与 AI Core 错误溯源机制
运维·人工智能·自动化
云边有个稻草人1 小时前
打工人摸鱼新姿势!轻量斗地主服务器,内网穿透让同事远程联机不翻车
运维·服务器·cpolar
乾元1 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
wbs_scy1 小时前
Linux 进阶指令实操指南:文件查看、时间管理、搜索压缩全场景覆盖(附高频案例)
linux·运维·服务器
安科瑞刘鸿鹏171 小时前
高速路灯故障难定位?用 ASL600 实现精确单灯监测与维护预警
运维·网络·物联网·安全
馨谙2 小时前
Ansible 事实(Facts)全面指南:自动化运维中的主机信息管理
运维·ansible
Lethehong2 小时前
实测可用|一文搞定OpenClaw部署,免费kimi-k2.5+飞书远程,新手也能秒上手
linux·运维·服务器·玩转openclaw·云端创意实践
馨谙2 小时前
Ansible处理程序完全指南:实现智能的任务触发机制
运维·ansible
承渊政道2 小时前
Linux系统学习【Linux基础开发工具】
linux·运维·笔记·学习·centos·编辑器