![获取进程开始时间,无论 NTP 更新如何](https://linux22.com/image/87126/%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E5%BC%80%E5%A7%8B%E6%97%B6%E9%97%B4%EF%BC%8C%E6%97%A0%E8%AE%BA%20NTP%20%E6%9B%B4%E6%96%B0%E5%A6%82%E4%BD%95.png)
我正在尝试记录进程的开始时间由 cronjob 启动@reboot
。我ps -p $$ -o ltime=
目前正在使用,但遇到了一个问题。
我的机器(Raspberry Pi)连接到网络,并在 cron 启动并调整系统时钟后拉下 NTP 更新。更新后更改返回的时间lstart
(当然,这确实有意义)。
问题是现在我有两个不同的开始时间,并且在我的监控中看起来好像该进程已重新启动。
由于当 NTP 更新下降时报告的开始时间会发生变化,因此似乎有一个潜在的开始时间概念不受系统时钟更改的影响(否则它会继续说进程在旧时间开始)。如何从流程中获取底层启动时间?
摘自我的系统日志:
$ grep -e '@reboot' -e 'Time has been' -C 3 /var/log/syslog
Apr 6 13:17:04 archer triggerhappy[386]: Error opening '/dev/input/event*': No such file or directory
Apr 6 13:17:04 archer kernel: [ 6.721869] usbcore: registered new interface driver brcmfmac
Apr 6 13:17:04 archer kernel: [ 6.930684] brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Dec 15 2015 18:10:45 version 7.45.41.23 (r606571) FWID 01-cc4eda9c
Apr 6 13:17:04 archer cron[381]: (CRON) INFO (Running @reboot jobs)
Apr 6 13:17:04 archer wpa_supplicant[376]: Successfully initialized wpa_supplicant
Apr 6 13:17:04 archer dphys-swapfile[385]: want /var/swap=100MByte, checking existing: keeping it
Apr 6 13:17:04 archer avahi-daemon[387]: Found user 'avahi' (UID 105) and group 'avahi' (GID 110).
--
Apr 6 13:17:15 archer ntpd_intres[587]: DNS 2.debian.pool.ntp.org -> 65.182.224.39
Apr 6 13:17:15 archer ntpd_intres[587]: DNS 3.debian.pool.ntp.org -> 174.123.154.242
Apr 6 13:17:17 archer dhcpcd[403]: wlan0: no IPv6 Routers available
Apr 6 13:53:40 archer systemd[1]: Time has been changed
Apr 6 13:54:00 archer systemd[1]: Starting user-1000.slice.
Apr 6 13:54:00 archer systemd[1]: Created slice user-1000.slice.
Apr 6 13:54:00 archer systemd[1]: Starting User Manager for UID 1000...
请注意时移 - 在该点之前lstart
会报告13:17:04
,但在该点之后报告13:53:27
。
答案1
您可以询问经过的时间(以秒为单位):
ps -p $$ -o etimes=
无论系统认为当前时间是什么,这始终是准确且可比较的。
您可以通过从当前正常运行时间(以秒为单位存储为第一个值)中减去它,将其转换为不变的起始值/proc/uptime
:
echo $(($(cut -d. -f1 < /proc/uptime) - $(ps -p $$ -o etimes=)))