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
相关推荐
IT大白鼠2 小时前
彭大帅的AI运维助手——怎么给AI写运维SOP:提示词设计实战
运维·人工智能·彭大帅
Canmag 兴隆磁性9 小时前
中大型钕铁硼产品的磁通测量与自动分选:一条产线自动化的工程实现思路
运维·学习·自动化·永磁材料
microrain10 小时前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
xuefeiniao11 小时前
PHP2Shell漏洞修复
运维·服务器·php
便利店102412 小时前
系统活动一抓留存!深入 Linux C/C++ 调试工具之 sysdig
linux·运维·服务器·sysdig
智能运维指南13 小时前
企业 IT 运维自动化平台怎么选?从场景匹配到 POC 验证的完整评估框架
运维·自动化·自动化运维·嘉为蓝鲸
珠海西格电力13 小时前
零碳园区管理系统的性能评估体系的行业标准
大数据·网络·人工智能·物联网·机器学习·架构·能源
toooooop814 小时前
CentOS 7 内核 3.10.0-1160.119.1 升级指南
linux·运维·centos
云飞云共享云桌面14 小时前
广东东莞制造工厂10人共享一台三维设计服务器
运维·服务器·3d·自动化·制造
优信电子14 小时前
HC05蓝牙模块主机与从机进行连接通信
单片机·物联网·嵌入式