我读过很多很多关于 Unix 时间的帖子,很多人说一天是 86400 秒。
但像这样的页面谈论的是闰秒。这让我很困惑。我读到Unix时间是基于UTC的,我所能理解的是UTC和TAI之间的区别是闰秒,所以Unix必须支持闰秒,否则为什么不说基于TAI而不是UTC呢?
为了让自己更加困惑,我试图看看 Windows 做了什么,我发现的答案是它不计算闰秒,但它说基于 UTC,再次令人困惑,如果不计算闰秒为什么要说 UTC?
不管怎样,我想问一下在 Unix 中如何将整数秒转换为精确日期?
ENV:GNU bash,版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) (它是旧的)
api_call
功能通常需要大约1s~5s。我的脚本 A
TIMEFORMAT=%R
while true; do
time=$(date +'%F %T')
api_result=$( { time api_call; } 2>api_runtime.txt )
api_runtime=$(cat api_runtime.txt)
echo "${time} ${api_result}"
sleep (( 10 - ${api_runtime} ))
done
我认为 Scrit A 会完成这项工作,直到有一天网络变慢并且循环不同步。
我的脚本 B
TIMEFORMAT=%R
while true; do
time=$(date +'%F %T')
api_result=$( api_call & )
sleep 10
echo "${time} ${api_result:-No response}"
done
脚本 B 目前似乎也可以工作,但我不确定下一个循环在api_call
10 秒以上时是否安全。
我如何实现这一目标?
man time
表明它有一些选项,像这样,只将time
输出写入文件而不是stderr
:
-o FILE, --output=FILE
所以,我尝试使用它
$ time -o out.txt ls
-o: command not found
real 0m0.081s
user 0m0.070s
sys 0m0.012s
这不起作用!它说-o: command not found
。
证明out.txt
不存在:
$ cat out.txt
cat: out.txt: No such file or directory
我究竟做错了什么?
如何使用 with 之类-o somefile.txt
的选项time
?
我在 Linux Ubuntu 18.04 上,bash
用作我的终端。
我有一个问题,如何将时间从 12h AM/PM 格式转换为 24h?例如,我有来自标准输入的输入,一些文本是这样的:
The event starts at 03:25PM and is expected to end at 06:17PM.
Registration will be opened from 09:00AM until 06:00 PM.
The event starts at 15:25 and is expected to end at 18:17.
Registration will be opened from 09:00 until 06:00 PM.
如何读取所有 hh:mmPM 和 hh:mmAM 并进行转换?但我不想像这样使用 awk 或 smth。我如何只使用 bash 循环、if/else、echo、sed 等来做到这一点?谢谢!
我想为一系列输入变量测量我的程序的运行时间(我正在使用 zsh):
for i in {1..3} ; do time sleep $i ; done
输出是
sleep $i 0,00s user 0,00s system 0% cpu 1,003 total
sleep $i 0,00s user 0,00s system 0% cpu 2,003 total
sleep $i 0,00s user 0,00s system 0% cpu 3,002 total
但我希望它是
sleep 1 0,00s user 0,00s system 0% cpu 1,003 total
sleep 2 0,00s user 0,00s system 0% cpu 2,003 total
sleep 3 0,00s user 0,00s system 0% cpu 3,002 total
如何time
打印实际命令,所有变量都替换为它们的值?
我已经尝试在子 shell 中运行程序,它没有按预期更改输出:
for i in {1..3} ; do time (sleep $i) ; done
由于我的程序为 stdout 和 stderr 生成自己的输出,因此我看不到一种方法可以简单地预先添加所有参数(还有一些不仅仅是i
),例如:
for i in {1..3} ; do echo -n "i=$i --> " ; time sleep $i ; done
我的 Linux 服务器的时间同步有问题。这台机器和 NTP 服务器都位于(较小的)大学数据中心,因此是本地地址。
奇怪的是该ntpdate
命令有效:
ntpdate -u 172.16.0.25
输出:
17 Jan 15:03:53 ntpdate[25993]: adjust time server 172.16.0.25 offset 0.036043 sec
但是,chronyd
没有(它只是挂起):
chronyd -q 'server 172.16.0.25 iburst'
我正在尝试所有方法来设置自动时间同步,ntpd
但没有成功,最后求助于chrony
但仍然无法弄清楚。
这是发生了什么事ntpd
。我使用https://vitux.com/how-to-setup-ntp-server-and-client-on-debian-10ntpdate
上的说明进行安装。conf文件有一个命令
server 172.16.0.25 prefer iburst
而系统状态ntp报告
Jan 18 10:26:11 akulab1 ntpd[26957]: kernel reports active service TIME_ERROR: 0x41: Clock Unsynchronized
具有以下ntpq -p
输出
HKS-SRV01.unica .LOCL. 1 u 9 64 15 0.557 2275.65 9.515 –
但是,一段时间后,服务报告
Jan 18 10:31:01 akulab1 ntpd[26957]: ntpd exiting on signal 15 (Terminated)
因为 NTP 同步没有成功。但是,ntpdate -u 172.16.0.25 报告同步:18 Jan 10:33:13 ntpdate[26990]: step time server 172.16.0.25 offset 2.282101 sec(如果我没记错的话......) – ksonofre 7 分钟前
这是我的/etc/ntp.conf
文件:
driftfile /var/lib/ntp/ntp.drift
leapfile /usr/share/zoneinfo/leap-seconds.list
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server 172.16.0.25 prefer iburst
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict source notrap nomodify noquery
我再次重新启动了 NTP 服务:systemctl restart ntp
的输出ntpq -np
如下:
root@akulab1:~# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 63 64 377 0.518 104.685 14.815
但是,服务 ( systemctl status ntp
) 仍然报告:
Jan 18 11:04:10 akulab1 ntpd[27089]: kernel reports TIME_ERROR: 0x4041: Clock Unsynchronized
而且,在我设置timedatectl set-ntp true
NTP 服务后,它会简单地关闭,即报告不活动。
我再次重新启动了 ntpd 服务并且它处于活动状态。此外,我已经等了一个多小时进行同步,但它从来没有得到它(服务器地址前面没有星号或加号) - 这是输出ntpq -np
:
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 61 64 377 0.588 269.847 14.797
此外,这是ntpdate -qu
命令的输出:
18 Jan 13:57:44 ntpdate[1975]: no servers can be used, exiting
好的,上面的命令不完整,所以ntpdate -qu 172.16.0.25
有以下输出:
server 172.16.0.25, stratum 1, offset 0.435131, delay 0.02621
18 Jan 14:51:56 ntpdate[6951]: adjust time server 172.16.0.25 offset 0.435131 sec
并ntpq -np
给出以下内容:
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 17 64 377 0.554 436.092 14.279
解决方案在下面接受的答案中给出。我假设时间同步现在正在工作,但我仍然会跟踪时钟漂移并更新我的问题,如果它没有正确同步。
最终解决方案发布在这篇文章中:ntp server reachable but never select/set the time
我正在使用安装了 Debian 的 ARM 设备。机器上安装了 GPS 芯片,我在程序中使用它。
话虽如此,它似乎非常、漫长,甚至有时甚至不可能得到修复。我的设备没有时钟。根据可用的来源,我可以从其他地方设置系统数据(如果用户将设备连接到 WIFI,则为 IE)
我真的不知道时区是如何运作的。我的国家只有一个,它会根据季节而变化。
我的第一个问题是: