2017年闰秒linux,6月30日将迎来人类迎来史上第26次闰秒可引起部分linux系统重启...

国际地球自转和参考坐标系统服务(IERS)将在格林威治时间2015年6月30日午夜增加一闰秒(维基百科关于闰秒的说明),由于Linux kernel和Posix关于NTP时间跳变的标准不同,将在2015年6月30日23:59:59 跳变到2015年7月1日后引起ntpd进程锁死,从而造成部分开启ntp服务的linux系统重启。

另外,群友“沈阳-任浩”补充几点说明关于调整闰秒可能导致 kernel hang 住的问题:

1. RHEL3/RHEL6所有系统不受该问题的影响。

2. RHEL4内核版本在kernel-2.6.9-89.EL (RHEL4.8)及以上,RHEL5内核版本在

kernel-2.6.18-164.el5(RHEL5.4)及以上的系统不受该问题的影响。

3. 其他RHEL4和RHEL5的系统有可能发生该问题,建议尽快升级至上述版本或更高

版本以规避该问题。

a. 若由于其他原因实在无法进行内核升级,且应用对时间的敏感度不是非常高,

容许有1秒钟的差值,有如下建议:

对于使用ntpd服务进行时间同步的RHEL,至少提前1天停止ntpd服务。并确保每台

机器上安装的tzdata的版本低于2011n-2(不 包含该版本)。

对于不使用ntpd服务进行时间同步的RHEL,确保每台机器上安装的tzdata的版本低

于2011n-2(不包含该版本)。

从而使系统不进行闰秒调整,待该事件完成之后,再可启动ntpd服务进行同步,或

者手动修改时间为正确时间。

提示:对于内部的以RHEL作为NTP服务器的系统,它是NTP服务器的同时,也是使用

ntpd服务与更上层NTP服务器进行时间同步的客户端, 故上述方法也适用于该系统。

b. 若由于其他原因实在无法进行内核升级,但应用对时间的敏感度非常高,不容

许有1秒钟的差值,则有可能发生kernel hang住的问题,尽管这个可能性是非常小的。

如果发生问题,可考虑重启该系统恢复。

根据这个情况,我有找到了相应的解决方法:

如果您的相关设备是使用Linux kernel 为2.6.18-164.e15以前的Linux系统,请做如下预防工作:

1、2012年6月28日当天(北京时间23点以前)先确认ntp服务已同步,然而关闭ntpd服务。

2、2012年7月2日(北京时间8点以后)当天开启ntpd服务,并确认ntp服务已同步。

对照上面的解决方法,我检测了我所有服务器(100多台,累死了),发现rhel5.4服务器的内核都为2.6.18-164.e15,但都没有开启ntp服务,而所有的SUSE Linux Enterprise Server 10 的linux系统里内核都是2.6.16.60-0.54.5-smp,就1台数据库服务器启动了ntp服务,下面演示我是如何如何的解决这个问题的:

1、先查看服务器是否有开启ntp服务,可以使用以下命令查询:

netstat -aunl|grep123 #由于123是ntp启动的端口,所有可以使用netstat来查看ntp的123端口,查看ntp服务是否启动;

ps -ef|grep ntp #查看ntp服务的进程是否在后台运行;

service ntp status #使用service来查看ntp服务的启动状态

下面是我使用这3中方法进行的检测结果

加载中…

可以看得我的服务器里ntp服务正在运行

关闭是方法如下:

直接杀掉ntp的进程,命令为:kill -9 $(ps -ef|grep ntp|grep -v grep|awk ‘{print $2}’);

使用service来关闭ntp,命令为:service ntp stop;

关闭后为了保证安全,还需要把ntp开机自动启动给关闭,命令为:chkconfig –level 345 ntp off;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
以下是一个简单的示例代码,用于将北斗整周数、周内秒转换为约化儒略和UTC时间,并且可以进行相应的互相转化。需要注意的是,这里只考虑了不考虑闰秒的情况。 ```c++ #include <iostream> #include <cmath> using namespace std; // 定义结构体 struct Time { int year; int month; int day; int hour; int minute; double second; }; // 声明函数 double getJulianDay(int year, int month, int day, int hour, int minute, double second); Time getUTCFromJD(double jd); double getJDFromUTC(Time utc); double getJDFromBD(int week, double seconds); Time getUTCFromBD(int week, double seconds); int main() { // 示例代码 int week = 2125; double seconds = 234567.89; double jd = getJDFromBD(week, seconds); Time utc = getUTCFromBD(week, seconds); cout << "北斗整周数:" << week << endl; cout << "周内秒数:" << seconds << endl; cout << "约化儒略:" << jd << endl; cout << "UTC时间:" << utc.year << "-" << utc.month << "-" << utc.day << " " << utc.hour << ":" << utc.minute << ":" << utc.second << endl; return 0; } // 计算儒略 double getJulianDay(int year, int month, int day, int hour, int minute, double second) { // 由于儒略是从 4713 1 1 12 时开始计算的,因此需要先将时间转换为以 4713 为基准的时分秒 int Y = year; int M = month; if (M <= 2) { Y--; M += 12; } int D = day; double H = hour + minute / 60.0 + second / 3600.0; double JD = floor(365.25 * Y) + floor(Y / 400.0) - floor(Y / 100.0) + floor(30.59 * (M - 2)) + D + 1721088.5 + H / 24.0; return JD; } // 将儒略转换为UTC时间 Time getUTCFromJD(double jd) { double JD = jd + 0.5; int Z = floor(JD); double F = JD - Z; int A, B, C, D, E, day, month, year, hour, minute; if (Z < 2299161) { A = Z; } else { int alpha = floor((Z - 1867216.25) / 36524.25); A = Z + 1 + alpha - floor(alpha / 4.0); } B = A + 1524; C = floor((B - 122.1) / 365.25); D = floor(365.25 * C); E = floor((B - D) / 30.6001); day = B - D - floor(30.6001 * E) + F; if (E < 14) { month = E - 1; } else { month = E - 13; } if (month > 2) { year = C - 4716; } else { year = C - 4715; } double H = (F - floor(F)) * 24.0; hour = static_cast<int>(H); double M = (H - hour) * 60.0; minute = static_cast<int>(M); double S = (M - minute) * 60.0; Time utc = {year, month, day, hour, minute, S}; return utc; } // 将UTC时间转换为儒略 double getJDFromUTC(Time utc) { double Y = utc.year; double M = utc.month; double D = utc.day; double H = utc.hour + utc.minute / 60.0 + utc.second / 3600.0; double JD = 367 * Y - floor(7 * (Y + floor((M + 9) / 12.0)) / 4.0) + floor(275 * M / 9.0) + D + 1721013.5 + H / 24.0; return JD; } // 将北斗整周数和周内秒数转换为儒略 double getJDFromBD(int week, double seconds) { double JD = 2444244.5 + week * 7.0 + seconds / 86400.0; return JD; } // 将儒略转换为北斗整周数和周内秒数 Time getUTCFromBD(int week, double seconds) { double JD = getJDFromBD(week, seconds); Time utc = getUTCFromJD(JD); return utc; } ``` 其中,`getJulianDay()` 函数用于计算儒略,`getUTCFromJD()` 函数用于将儒略转换为UTC时间,`getJDFromUTC()` 函数用于将UTC时间转换为儒略,`getJDFromBD()` 函数用于将北斗整周数和周内秒数转换为儒略,`getUTCFromBD()` 函数用于将儒略转换为北斗整周数和周内秒数。 需要注意的是,上述代码只考虑了不考虑闰秒的情况。如果需要考虑闰秒,还需要进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值