多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Linux的时间同步+定时任务常用命令及选择

Linux的时间同步+定时任务常用命令及选择 时间同步定时任务一.为什么要时间同步场景时间不准会出什么问题日志分析排查故障时看不准时间顺序HTTPS 证书服务器时间偏差大浏览器提示“证书无效”JAVA项目登录JWT Token 验证失败用户无法登录分布式系统多台服务器时间不一致无法判断请求先后二.chrony是什么chrony是Linux系统的时间同步工具让服务器时间保持准确主要组件组件说明chronyd后台服务持续同步时间后台守护进程chronyc命令行工具查看同步状态命令工具配置chrony.confcat /etc/chrony.conf EOF ​ # 使用中国区 NTP 服务器池自动轮询国内速度快 pool cn.pool.ntp.org iburst ​ # 备用方案任选其一注释掉上面的 pool 即可使用 # server time1.aliyun.com iburst # server ntp.aliyun.com iburst ​ # 允许内网客户端查询作为时间服务器时启用 allow 192.168.0.0/16 ​ # 记录系统时钟的晶振偏差让 chrony 长期运行更精准 driftfile /var/lib/chrony/drift ​ # 当偏差 1 秒时在启动后的前 3 次同步中执行步进跳转之后只做缓慢微调 makestep 1.0 3 ​ # 自动将系统时间写入硬件时钟相当于定期执行 hwclock --systohc rtcsync ​ # NTP 认证密钥文件一般用不到 keyfile /etc/chrony.keys ​ # 调试转储目录一般用不到 ntsdumpdir /var/lib/chrony ​ # 闰秒时区设置保持默认即可 leapsectz right/UTC ​ # 日志目录 logdir /var/log/chrony ​ #启动 systemctl enable --now chronyd查看时间源[rootgald ~]# chronyc sources -v .-- Source mode ^ server, peer, # local clock. / .- Source state * current best, combined, - not combined, | / x may be in error, ~ too variable, ? unusable. || .- xxxx [ yyyy ] /- zzzz || Reachability register (octal) -. | xxxx adjusted offset, || Log2(Polling interval) --. | | yyyy measured offset, || \ | | zzzz estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample ^? time.neu.edu.cn 1 6 377 61 -1057s[ -1057s] /- 9460us ^~ ntp.wdc2.us.leaseweb.net 3 6 377 58 -1057s[ -1057s] /- 133ms ^? 119.28.183.184 2 6 377 61 -1057s[ -1057s] /- 60ms ^? 139.199.214.202 2 6 377 61 -1057s[ -1057s] /- 42ms第一列——状态标识最关键符号当前行含义^?第一行不可达连不上^-第二行被否决偏差较大暂不使用^*第三行当前正在使用的主同步源^第四行备选同步源chrony常用命令#查看时间源 chronyc sources -v ​ #立即同步 chronyc makestep ​ #查看同步精度 chronyc tracking ​ #查看时间 date ​ #修改时区(改成亚洲/上海) timedatectl set-timezone Asia/shanghai ​ #确认时区设置 timedatectl ​ #手动修改配置 echo“Asia/shanghai” /etc/timezone cp /user/share/zoneinfo/Asia/Shanghai /etc/localtime二.定时任务2.1什么是定时任务运维工作中经常需要在固定时间执行某些任务每天凌晨备份日志、每小时清理临时文件、每周一发送报表……这些重复性工作可以用定时任务自动完成。对比项CronSystemd Timer出现时间传统Unix时代现代Systemd时代配置方式crontab文件.timer.service单元精度分钟级秒/微秒级日志集成需手动配置自动集成journalctl依赖管理不支持支持错过执行补偿不支持支Cron是什么Cron是Linux系统中最经典的定时任务工具通过crond守护进程每分钟检查一次是否有任务需要执行。Cron三种配置位置配置位置用途编辑方式crontab -e用户级定时任务每个用户独立保存再/var/spool/cron/用户名/etc/crontab系统级定时任务需要root权限编辑/etc/cron.d应用级定时任务每个应用独立文件便于管理Cron的时间字段格式* * * * * 命令 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ └─── 星期几 (0-7, 0和7都表示周日) ┊ ┊ ┊ └───── 月份 (1-12) ┊ ┊ └─────── 日期 (1-31) ┊ └───────── 小时 (0-23) └─────────── 分钟 (0-59)特殊字符字符含义示例*任意值* * * * *每分钟列举多个值11530 * * * * 每小时的第11530分钟-范围10-15* * * * 每小时的第10到15分钟/步长*/5 * * * * 每五分钟Systemd Timer什么是Systemd TimerSystemd Timer 是 Systemd 内置的定时任务机制由一个 .timer 单元定义触发时间和一个 .service 单元定义执行内容配对工作。Timer的触发方式触发方式说明示例OnCalendar日历触发类似Cron的时间表达式--* 02:00:00每天凌晨两点OnBootSec系统启动后延迟触发OnBootSec5minOnUnitActiveSec服务上次激活后延迟触发OnUnitActiveSec1h实战每天凌晨备份日志与Cron对比最小化安装后没有tar.手动安装dnf -y install tar第一步创建备份脚本#创建备份脚本 [rootgald ~]# cat /opt/backup.sh EOF #!/bin/bash /usr/bin/tar -czf /backup/logs-timer-$(date %F).tar.gz /var/log/ 2/dev/null EOF ​ #设置文件权限让所有用户都可以执行也可以单独设置 [rootgald ~]# chmod X /opt/backup.sh第二步创建Service单元[rootmagedu ~]# vim /etc/systemd/system/backup-timer.service [Unit] DescriptionLog Backup Service (Timer) #这里不是给程序使用可以不设置条件 ​ [Service] Typeoneshot ExecStart/opt/backup.sh #这里只能使用绝对路径 Userroot #设置执行用户Typeoneshot 表示任务执行一次即退出适合定时任务第三步创建Timer单元[rootgald ~]# vim /etc/systemd/system/backup-time.timer [Unit] DescriptionLog Backup Timer ​ [Timer] OnCalendardaily #启动设置 每天执行一次 Persistenttrue #系统在计划时间关机开机后立即执行错过补偿 ​ [Install] WantedBytimers.target #定时单元第四步启动 Timer[rootgald ~]# systemctl daemon-reload #每次写完system的文件都要使用 [rootgald ~]# systemctl enable backup-timer.timer #设置开机自动启动 [rootgald ~]# systemctl start backup-timer.timer #开启定时任务 [rootgald ~]# systemctl list-timers #查看所有的定时任务 NEXT LEFT LAST PASSED UNIT Sat 2026-07-25 01:22:07 CST 59min Fri 2026-07-24 07:25:00 CST 59min ago dnf•makecache.timer Sat 2026-07-25 01:30:34 CST 1h 8min Sat 2026-07-25 00:00:00 CST 22min ago fwupd•refresh.timer Sat 2026-07-25 22:22:07 CST 21h Fri 2026-07-24 07:25:00 CST 2h 0min ago systemd•tmpfiles-clean.timer Sun 2026-07-26 00:00:00 CST 23h - - backup•timer.timer Sun 2026-07-26 00:08:39 CST 23h Sat 2026-07-25 00:21:53 CST 19s ago logrotate.timer Mon 2026-07-27 01:38:13 CST 2 days Wed 2026-07-22 19:05:49 CST - fstrim.timer 6 timers listed. Pass --all to see loaded but inactive timers, too.字段值含义NEXTSun 2026-07-26 00:00:00 CST下次执行时间LEFT23h还要约23小时LAST-从未执行过PASSED-从未执行过Cron和Systemd对比对比项CronSystemd Timer生成的备份文件/backup/log-cron-日期.tar.gz/backup/log-timer-日期.tar.gz配置方式一行crontab两个单元文件日志查看tail -f /var/log/cronjournalctl -u backup-timer.service适合场景简单任务复杂任务OnCalendar时间表达式表达式含义daily每天 00:00:00weekly每周一 00:00:00monthly每月1号 00:00:00hourly每小时整点boot系统启动时--* 02:00:00每天凌晨2点Mon..Fri 09:00:00工作日上午9点* - - *-01 04:00:00每月1号凌晨4点*:15:00每十五分钟执行一次选型建议场景推荐方案原因简单单条命令Cron配置简单一行搞定日常运维脚本Cron习惯使然够用需要依赖其他服务Systemd Timer可指定After需要详细日志追踪Systemd Timer自动集成journalctl需要秒级精度Systemd TimerCron 只能到分钟需要错过执行补偿Systemd TimerPersistenttrueRocky 与 Ubuntu 的定时任务差异对比项Rcoky10Ubuntu26.04crond 服务名crondcron查看cron日志/var/log/cron/var/log/syslog(grep cron)systemctl 命令同左同左journalctl 命令同左同左
返回列表