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
相关推荐
爱吃烤鸡翅的酸菜鱼2 小时前
Java【网络原理】(3)网络编程续
java·运维·服务器·网络
QuiteCoder8 小时前
【Linux】软硬连接与动静态库
linux·运维·服务器
꧁༺朝花夕逝༻꧂8 小时前
Linux基础--用户管理
linux·运维
钡铼技术物联网关9 小时前
Ubuntu工控卫士在制造企业中的应用案例
大数据·人工智能·物联网·边缘计算
Narutolxy9 小时前
Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309
运维·ubuntu·docker
明明跟你说过9 小时前
在【k8s】中部署Jenkins的实践指南
运维·ci/cd·云原生·容器·kubernetes·jenkins
沉默的八哥9 小时前
RBAC的工作原理,以及如何限制特定用户访问
运维·kubernetes
琪琪花11 小时前
sshfs 将远程服务器上的文件系统挂载到本地目录
linux·运维·服务器
dreamczf11 小时前
基于Linux系统的边缘智能终端(RK3568+EtherCAT+PCIe+4G+5G)
linux·人工智能·物联网·5g
wayuncn11 小时前
哈尔滨服务器租用的流程
运维·服务器