本文目录导读:

Linux/Unix 系统
Windows 时间同步脚本(适用于Linux)
#!/bin/bash # 使用 NTP 服务器同步时间 # 安装 NTP 工具(如果需要) sudo apt-get install ntpdate # Debian/Ubuntu # sudo yum install ntpdate # CentOS/RHEL # 同步时间 sudo ntpdate -u pool.ntp.org # 或者使用 systemd-timesyncd sudo timedatectl set-ntp true
使用 chrony(更现代的替代方案)
#!/bin/bash # 安装 chrony sudo apt-get install chrony # Debian/Ubuntu # 启动并启用服务 sudo systemctl start chronyd sudo systemctl enable chronyd # 立即同步 sudo chronyc makestep
PowerShell 脚本(Windows)
# Windows 时间同步脚本 # 以管理员身份运行 # 同步到 Microsoft 时间服务器 w32tm /resync /force # 或者指定其他 NTP 服务器 w32tm /config /manualpeerlist:"pool.ntp.org" /syncfromflags:manual /reliable:YES /update w32tm /resync # 设置自动时间同步 Set-Service -Name w32time -StartupType 'Automatic' Start-Service w32time
Python 脚本(跨平台)
#!/usr/bin/env python3
import subprocess
import sys
import socket
import ntplib
from datetime import datetime
import os
def sync_time_ntp():
"""使用 NTP 协议同步时间"""
try:
# 使用 ntplib 获取 NTP 服务器时间
client = ntplib.NTPClient()
response = client.request('pool.ntp.org', version=3)
# 获取 NTP 服务器时间
ntp_time = datetime.fromtimestamp(response.tx_time)
print(f"NTP 服务器时间: {ntp_time}")
# 根据操作系统执行时间设置
if sys.platform == 'win32':
# Windows 使用 PowerShell 命令
cmd = f'powershell "Set-Date \'{ntp_time.strftime("%Y-%m-%d %H:%M:%S")}\'"'
elif sys.platform == 'linux' or sys.platform == 'darwin':
# Linux/Mac 使用 date 命令
cmd = f'date -s "{ntp_time.strftime("%Y-%m-%d %H:%M:%S")}"'
else:
print("不支持的操作系统")
return False
# 执行命令
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode == 0:
print("时间同步成功!")
return True
else:
print(f"时间同步失败: {result.stderr}")
return False
except Exception as e:
print(f"错误: {e}")
return False
def sync_time_system():
"""使用系统命令同步时间"""
try:
if sys.platform == 'win32':
# Windows 使用 w32tm
subprocess.run(['w32tm', '/resync', '/force'], check=True, capture_output=True)
elif sys.platform == 'linux':
# Linux 使用 ntpdate 或 timedatectl
try:
subprocess.run(['sudo', 'ntpdate', '-u', 'pool.ntp.org'], check=True, capture_output=True)
except:
subprocess.run(['sudo', 'timedatectl', 'set-ntp', 'true'], check=True, capture_output=True)
else:
print("不支持的操作系统")
return False
print("系统时间同步成功!")
return True
except Exception as e:
print(f"系统同步失败: {e}")
return False
if __name__ == "__main__":
print("开始同步时间...")
# 优先通过网络获取时间
if not sync_time_ntp():
print("尝试使用系统同步...")
sync_time_system()
批量同步脚本(适用于多台服务器)
#!/bin/bash
# 远程服务器时间同步脚本
# 服务器列表文件 (每行一个IP或主机名)
SERVERS_FILE="servers.txt"
# SSH 用户
SSH_USER="root"
# SSH 密钥
SSH_KEY="$HOME/.ssh/id_rsa"
# 检查服务器列表是否存在
if [ ! -f "$SERVERS_FILE" ]; then
echo "服务器列表文件不存在: $SERVERS_FILE"
exit 1
fi
echo "开始同步所有服务器的时间..."
while read server; do
[ -z "$server" ] && continue # 跳过空行
echo "正在同步 $server ..."
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_USER@$server" \
"sudo ntpdate pool.ntp.org && echo '同步成功' || echo '同步失败'"
done < "$SERVERS_FILE"
echo "所有服务器时间同步完成"
定时自动同步脚本
#!/bin/bash
# 添加到 crontab 实现定时同步
# crontab 配置(每天凌晨 2 点执行)
# 0 2 * * * /path/to/time_sync.sh
echo "=== 时间同步脚本 ==="
echo "开始时间: $(date)"
# 检查网络连接
if ! ping -c 1 pool.ntp.org > /dev/null 2>&1; then
echo "无法连接到 NTP 服务器"
exit 1
fi
# 执行时间同步
if command -v ntpdate &> /dev/null; then
sudo ntpdate -u pool.ntp.org
elif command -v chronyc &> /dev/null; then
sudo chronyc makestep
elif command -v timedatectl &> /dev/null; then
sudo timedatectl set-ntp true
else
echo "没有找到可用的时间同步工具"
exit 1
fi
echo "同步完成: $(date)"
使用 Docker 容器
# docker-compose.yml
version: '3'
services:
timesync:
image: alpine
network_mode: host
volumes:
- ./auto-time-sync.sh:/scripts/auto-time-sync.sh
entrypoint: ["/bin/sh", "-c"]
command: |
apk add --no-cache chrony ntp
while true; do
chronyc makestep
ntpdate pool.ntp.org
sleep 3600
done
使用建议
- 权限要求:这些脚本通常需要管理员/root 权限
- 网络要求:需要能访问 NTP 服务器
- 安全考虑:使用 HTTPS 或可信的同步源
- 日志记录:建议添加日志输出便于排查问题
选择哪种方法取决于你的操作系统和具体需求,对于大多数情况,直接使用系统的 NTP 服务(如 timedatectl 或 w32time)是最简单可靠的选择。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播