Shell脚本——时间同步

本文介绍了Linux系统中的时间管理机制,包括系统时间和硬件时间的区别与联系、如何设置和同步这两种时间,以及利用NTP协议进行网络时间同步的方法。

在Linux系统中,为避免主机时间因长时间运作下导致的时间偏差,需进行时间同步synchronize;

一、系统时间与硬件时间

一台计算机有两个时钟,一是硬件时间时钟(RTC,Real Time Clock,又实时时钟),二是系统时钟(System Clock);

1 概念

硬件时钟是嵌在主板上的特殊电路,平时关机后还可计算时间;

系统时钟是操作系统的kernel用以计算时间的时钟;


2 工作原理

在Linux系统下,系统时间在开机时会和硬件时间同步,随后各自独立运行;

默认情况下,系统时间和硬件时间不会自动同步;

硬件时间运行依靠BIOS电池,系统时间运行依靠CPU tick,这也是系统时间长时间运行会产生时间偏差的原因;


3 查看时间

系统时间通过date命令查看,硬件时间通过clock或hwclock命令查看;





二、设置系统时间与硬件时间

1 设置系统时间

date -s "20170522 14:29:25" #或
date -s "2017-05-22 14:29:25" # 或
date -s "14:29:25 20170522" # 或
date -s "14:29:25 2017-05-22" # 或


2 设置硬件时间

hwclock --set --date="2017-05-22 14:29:25"; # 或
clock --set --date "2017-05-22 14:29:25";




三、系统时间和硬件时间同步

1 把系统时间设置成硬件时间

hwclock --systohc


2 把硬件时间设置成系统时间

hwclock --hctosys




四、时间同步设置

1 网络时间协议NTP(Network Time Protocol)

是互联网中时间同步的标准互联网协议;

用于将计算机时间同步到某些时间标准;


2 同步时间

同步时间,需要一个精确的NTP server,可在NTP官网http://www.pool.ntp.org查找离自己最近的NTP server;

同步时间,使用ntpd或ntpdate命令;

(1)ntpd命令不仅是时间同步服务器,还可当作客户端与标准时间服务器进行同步时间,且平滑同步,一点点校正时间;

(2)ntpdate命令是立即同步,直接调整时间;

在生产环境中,慎用ntpdate命令;

ntpd 2.cn.pool.ntp.org


3 定时同步

可在/stc/crontab文件中添加如下内容,使系统每隔十分钟同步一次;

*/10 * * * * ntpdate 1>/dev/null 2>&1


### 如何使用 Shell 本通过 Cron 实现数据同步 为了实现数据的自动同步,可以编写一个 Shell 本来完成所需的任务,并将其配置为由 `cron` 定时运行。以下是具体方法: #### 1. 创建 Shell 本 首先创建一个 `.sh` 文件作为本文件,用于定义数据同步逻辑。例如,假设需要从远程服务器拉取最新代码并保存到本地目录。 ```bash #!/bin/bash # 设置变量 REPO_DIR="/path/to/local/repo" GIT_URL="https://github.com/username/repository.git" # 如果目标目录不存在则克隆仓库 if [ ! -d "$REPO_DIR/.git" ]; then git clone $GIT_URL $REPO_DIR fi # 进入工作目录 cd $REPO_DIR || exit # 更新代码库 echo "Pulling latest changes from Git repository..." git pull origin main >/dev/null 2>&1 && echo "Repository updated successfully." || echo "Failed to update repository." exit 0 ``` 上述本会检查是否存在指定的目标目录;如果不存在,则初始化一个新的 Git 存储库副本。随后它会在该存储库中执行 `git pull` 命令以获取最新的更改[^2]。 #### 2. 配置权限 确保本具有可执行权限: ```bash chmod +x /path/to/script.sh ``` #### 3. 添加 Cron 定时任务 编辑当前用户的 `crontab` 文件: ```bash crontab -e ``` 向其中添加一行以安排定时任务。例如,每小时运行一次此本: ```bash 0 * * * * /path/to/script.sh >> /var/log/sync.log 2>&1 ``` 这表示每天每隔一小时运行 `/path/to/script.sh` 并将输出记录至日志文件 `/var/log/sync.log` 中以便后续排查问题[^1]。 #### 4. 测试与验证 可以通过手动触发本来测试其功能是否正常运作: ```bash /path/to/script.sh ``` 同时也可以查看最近几次 cron 执行情况以及错误信息: ```bash tail -f /var/log/syslog | grep CRON ``` --- ### 使用 Python 的 APScheduler 替代方案 (扩展阅读) 除了传统的 Shell+Cron 组合外,还可以考虑利用 Python 提供的强大框架——APScheduler 来管理复杂的调度需求。比如下面展示了一个基于 CronTrigger 的例子,它可以按照设定的时间表周期性地调用函数去处理业务逻辑[^3]: ```python from apscheduler.schedulers.blocking import BlockingScheduler import subprocess def sync_data(): result = subprocess.run(['/path/to/script.sh'], capture_output=True, text=True) if result.returncode != 0: print(f'Error occurred: {result.stderr}') else: print('Data synchronization completed.') sched = BlockingScheduler() sched.add_job(sync_data, 'cron', hour='*/1') # 每隔一个小时运行一次 sched.start() ``` 这样做的好处在于能够更加灵活地控制作业流,并且易于集成进更高级别的应用程序架构之中。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值