获取进程开始时间,无论 NTP 更新如何

获取进程开始时间,无论 NTP 更新如何

我正在尝试记录进程的开始时间由 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=)))

相关内容