问题背景
昨天,项目经理半夜给我发了一个BUG,说是在集成平台上面,我们的应用无法跳转,让我今天早上看看。应用是做了单点登录,登录用户从第三平台通过接口获取信息的,我猜测大概率是用户获取不到,第三个接口存在问题吧。
日志排查
登录服务器打开,应用的日志界面,重新登录第三方平台,点击跳转到我们的应用,果然是获取用户信息的接口报错了,获取不到用户信息无法登陆。
查看报错日志
获取当前的值为:{"msg":"1timestamp expire... now:1704890293245,req:1704889561000","code":401,"requestId":"xxxxxxx"}
从对方接口返回来看是时间超期了,这就很奇怪了,我写这个接口的时候是直接拿当时时间去请求的,正常情况下不应该过期。
突然想到可能是服务器时间是错的,导致我们请求接口失败,使用了date
命令查看,果然时间慢了12分钟,问题找到了就很容易解决。
我又用hwclock --show
查看了一下硬件的时间,发现是正常的,那就更容易解决了。
我用以下的命令将硬件时钟时间设置为当前系统时间。
hwclock --hctosys
如果要将系统时间写入到硬件时钟时间
hwclock --systohc
我们也可以自定义系统时间/硬件时钟时间
date -s "2024-01-11 12:12:00"
hwclock --set- -date="2024-01-11 12:12:00"
设置完成之后,重新点击我们的应用,跳转成功。
问题其实到这里已经解决了,但是为啥说是艰难呢
同步服务器时钟源
背景知识准备
我将BUG修复结果和出现原因报告给项目经理,同时我说正常我们内部服务器都会把某个服务器当做时钟源用来同步时间,但是这次不成功,正常我们所有服务器都会弄的。
刚好我们公司的系统工程师离职了,然后项目经理觉得这个也不难,就让我把同步时钟源弄好。我虽然是个Java程序员,但是在小公司里前后端、服务器都搞过,想着这个不难就应下来了。
想着就是简单的ntpdate
一把刷就好,然后发现
然后安装吧,发现在内网不能连外网在线安装,那就离线安装,找到一个不错的网站https://pkgs.org
/可以用来离线下载安装包。
找了一个centos版本的安装ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
,但是缺少依赖无法安装,然后找了依赖安装,还是不行,我想着可能是版本问题,查看一下服务器的版本。
然后我就用
cat /etc/redhat-release
懵逼了这个是啥。问一下AI吧
Anolis OS 8.4是龙蜥操作系统的一个版本,这个版本在Anolis OS 8.2之后发布。它继承了Anolis OS对多计算架构的支持,包括x86_64和aarch64,并且搭载了双内核RHCK(RHEL Compatible Kernel)和ANCK(OpenAnolis Cloud Kernel)。其中,ANCK是由社区Cloud Kernel SIG组基于上游4.19 LTS kernel研发的,可以提供更强大的稳定性、性能和隔离能力。此外,Anolis OS 8.4还提供了CentOS系统到Anolis OS的迁移工具,以帮助用户更顺滑地进行系统及应用的迁移。
不是很了解,再问一下
Anolis OS release 8.4应该安装哪个版本的ntpdate
Anolis OS 8.4中,由于不再默认支持ntp软件包,时间同步将由chrony来实现。chrony是一个免费开源的工具,它可以通过NTP服务或类似GPS时钟接收器的硬件级参考时钟来同步系统时钟,进而提供更准确的系统时间。如果你习惯了使用ntpdate来同步时间,可能需要一些时间去适应chrony。但请注意,考虑到Anolis OS 8.4已经集成了chrony,推荐你使用chrony进行时间同步。
竟然不能使用ntpdate
,让我使用chrony
,这个又是啥,再问问
Chrony是一个开源的自由软件,它是网络时间协议(Network Time Protocol,NTP)的一种实现,可以提供保持系统时间与NTP时钟服务器同步的服务。Chrony专为间歇性互联网连接的系统设计,不过也能良好应用于持久互联网连接的环境。
Chrony主要由两个程序组成:chronyd和chronyc。chronyd是在系统后台运行的服务进程,主要负责调整系统时间并与NTP服务器进行时间同步;而chronyc则是一个用于管理chrony服务的命令行工具,可以用来查看和控制chronyd的行为。
然后看一下服务器是否安装了chrony
发现服务器是有的,那就再AI一下,问一下这个怎么操作
chrony是一个用于时间同步的守护进程,它可以在Linux系统上提供精确的时间同步。以下是一些常用的chrony操作:
- 安装chrony:
sudo yum install chrony -y
- 启动chrony服务:
sudo systemctl start chronyd
- 设置开机自启动chrony服务:
sudo systemctl enable chronyd
- 查看chrony服务状态:
sudo systemctl status chronyd
- 手动同步时间:
sudo ntpdate pool.ntp.org
- 查看当前系统时间:
date
- 查看chrony服务器列表:
chronyc sources
- 添加外部NTP服务器:
sudo chronyc server <server_ip> iburst
- 删除外部NTP服务器:
sudo chronyc server <server_ip> off
- 更新系统时间:
chronyc -a makestep
- 查看当前系统时间:
chronyc tracking
- 显示每个时间同步源的详细信息:
chronyc sources -v
实际操作
配置时钟源
vim /etc/chrony.conf
添加服务器同步时钟源
server <服务器同步时钟源IP地址> iburst
重启服务
systemctl restart chronyd
更新时间
chronyc -a makestep
已经正常解决了。
总结
现在AI已经很厉害了,大家可以多去用用,真的能提高效率,但是作为程序员,其实还是比较好甄别信息是否准确,直接拿来运行,能解决问题就是可以的。
现在Java程序员越来越不值钱了,我们公司是一个小公司,作为Java程序员也不能只做后端服务,前端、服务、测试都要懂,都要熟练,为了生活,增强点自我技术,苟着吧。