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 分钟前
MySQL 索引
运维·数据库·学习·mysql
无代码专家11 分钟前
数字化转型下的订单管理全流程优化方案
大数据·运维·人工智能
网硕互联的小客服28 分钟前
服务器的IO性能怎么看?
linux·运维·服务器·安全
小狗照亮每一天30 分钟前
【菜狗学编程】服务器基础知识——20251130
运维·服务器
小李做物联网31 分钟前
6.7基于单片机stm32物联网嵌入式项目程序开发之人脸健康检测系统
stm32·单片机·嵌入式硬件·物联网·计算机外设
徐同保32 分钟前
Nginx不能转发带有websocket功能的项目解决方案
运维·websocket·nginx
Guheyunyi35 分钟前
智能巡检系统:智能化管理的安全守护者
大数据·运维·服务器·人工智能·安全
枸杞CN37 分钟前
Ubuntu设置静态网络IP
linux·运维·服务器
aloha_7891 小时前
Linux常用增删改查命令
linux·运维·excel
water_931 小时前
ubuntu20.04 在conda虚拟环境中配置深度学习环境
linux·运维·ubuntu