Obtenha o horário de início do processo, independentemente das atualizações do NTP

1

Estou tentando registrar a hora de início de um processo iniciada por um @reboot cronjob. Estou usando ps -p $$ -o ltime= atualmente, mas encontrei um problema.

Minha máquina (um Raspberry Pi) conecta-se à rede e retira uma atualização NTP depois que o cron é iniciado e ajusta o relógio do sistema. O tempo retornado por lstart muda após a atualização (o que faz sentido, é claro).

O problema agora é que eu tenho dois horários de início diferentes, e parece que meu monitoramento é como se o processo fosse reiniciado.

Como o horário de início informado é alterado quando a atualização do NTP é desativada, parece que há uma noção de horário de início subjacente que não é afetada por alterações no relógio do sistema (caso contrário, ele continuaria dizendo que o processo começou nos tempos antigos) . Como posso obter o tempo de início subjacente de um processo?

Trecho dos meus registros do sistema:

$ 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...

Observe o deslocamento do tempo - antes disso, lstart informaria 13:17:04 , mas depois de reportar 13:53:27 .

    
por dimo414 06.04.2016 / 17:37

1 resposta

2

Você pode pedir o tempo decorrido em segundos:

ps -p $$ -o etimes=

Isso sempre será preciso e comparável, independentemente do que o sistema acha que é a hora atual.

Você pode transformá-lo em um valor inicial imutável, subtraindo-o do tempo de atividade atual (armazenado em segundos como o primeiro valor em /proc/uptime ):

echo $(($(cut -d. -f1 < /proc/uptime) - $(ps -p $$ -o etimes=)))
    
por 06.04.2016 / 17:41

Tags