Como verificar os últimos processos de reinicialização no unix?

0

Estou verificando processos pelo comando "p" e a saída é como abaixo.

UID         PID   PPID  C STIME TTY          TIME CMD                                    
myapp    10235  20365 99 Feb15 ?        11-15:01:41 cont AppRating  
myapp    20168  20365 99 01:39 ?        18:29:08 cont AppRating     
myapp    20322      1  0  2017 ?        18:07:14 monitor -p -a                          
myapp    20355  20322  0  2017 ?        12:34:55 agent -n                              
myapp    20780  20322 10  2017 ?        12-02:36:07 bsus -n                            
myapp    40675  20365 99 Feb16 ?        10-10:34:21 cont AppRating  
myapp    60749  20365 99 Feb21 ?        1-22:12:18 cont AppRating    
myapp   143363  20365  4 Feb26 ?        08:04:12 cont TimeOutSession    
myapp   143569  20365  1 Jan31 ?        05:57:05 cont AMn               
myapp   242818  20365 99 Feb21 ?        1-00:00:38 cont AppRating  

Agora eu quero verificar os processos cujo STIME é após o dia antes de ontem.
suponha que se a data de hoje é 27 fev 2018. então eu quero verificar se algum processo começou após 26 fev 2018 00:00 AM.
se sim, então imprima não ok na frente dessa linha. como abaixo da saída.

myapp    20168  20365 99 01:39 ?        18:29:08 cont AppRating --> NOTOK  
myapp   143363  20365  4 Feb26 ?        08:04:12 cont TimeOutSession --> NOTOK

Caso contrário, imprima simplesmente "OK" apenas.

    
por user3548033 27.02.2018 / 09:55

1 resposta

0

A abordagem mais fácil que posso imaginar é escolher a saída em segundos desde o início.

ps -eo etimes,pid,cmd

Isso fornecerá uma lista com os segundos desde o início do processo, assim:

ELAPSED   PID CMD
  13802 26157 /just/some/command

O resultado pode ser usado para extrair os dados. Como não consegui entender qual lógica você queria aplicar (algo a cerca de dois dias atrás), eu apenas exibo as informações e você pode ajustar o script às suas necessidades. 172800 é 2 * 86400, que é o número de segundos em um dia.

#!/bin/bash
ps -eo etimes,pid,cmd | grep -v ^ELAPSED | while read line
do
  ETIME=$(echo ${line} | awk '{ print $1 }')
  if [[ ${ETIME} -gt 172800]]; then
    echo "Old process ${line}"
  else
    echo "Newer process ${line}"
  fi
done
    
por 27.02.2018 / 10:26