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
相关推荐
xiaobangsky3 分钟前
使用Nginx配置本地静态资源iscweb访问后端服务fs-isc
运维·nginx
SMF19193 分钟前
【Vmware】windows物理机共享文件给vm虚拟机中的Centos系统
linux·运维·centos
txinyu的博客4 分钟前
静态库 & 动态库
linux·运维·服务器
阮松云4 分钟前
Centos挂载分区扩容记录
linux·运维·centos
shhpeng4 分钟前
Debian 包的制作与安装完整指南
运维·debian
AC赳赳老秦9 分钟前
Docker+DeepSeek:生成镜像优化Dockerfile与容器健康检查脚本
android·运维·人工智能·机器学习·docker·容器·deepseek
yangminlei10 分钟前
安装 Elasticsearch
运维·jenkins
鱼香rose__10 分钟前
Linux远程登录-SSH
linux·运维·ssh
shhpeng11 分钟前
如何制作一个简单的 .deb Debian 包 ?
运维·debian
等什么君!13 分钟前
Docker中常用的镜像命令和容器命令
运维·docker·容器