Unix에서 최신 재시작 프로세스를 확인하는 방법은 무엇입니까?

Unix에서 최신 재시작 프로세스를 확인하는 방법은 무엇입니까?

"p" 명령을 통해 프로세스를 확인하고 있는데 출력은 아래와 같습니다.

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  

이제 전날 이후 STIME의 진행 상황을 확인하고 싶습니다.
오늘 날짜가 2018년 2월 27일이라고 가정합니다. 그런 다음 2018년 2월 26일 오전 0시 이후에 시작된 프로세스가 있는지 확인하고 싶습니다.
그렇다면 해당 줄 앞에 not ok를 인쇄하세요. 아래 출력과 같습니다.

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

그렇지 않으면 그냥 "OK"를 인쇄하세요.

답변1

귀하의 p명령은 동일한 유형의 출력을 생성하는 것으로 보이며 ps -Af별칭일 수 있습니다.

오늘 시작된 프로세스의 경우 STIME 형식은 오늘 이전에 시작된 프로세스의 경우 MonDD가 사용되고 YYYY 형식이 사용되므로 대신 오늘을 가정하여 어제 또는 오늘 시작된 프로세스가 보고됩니다. 1월의 첫 번째 프로세스에서는 STIME이 어제 MonDD이거나 HH:MM 형식인 항목만 찾을 수 있습니다.

이는 GNU 구현을 가정합니다 date.

p | awk -v yesterday="$(LC_ALL=C date -d yesterday +%b%d)" '
  NR > 1 {$0 = $0 " --> " ($5 == yesterday || $5 ~ /:/ ? "NOTOK" : "OK")}
  {print}'

답변2

제가 생각하는 가장 쉬운 방법은 처음부터 몇 초 안에 출력을 선택하는 것입니다.

ps -eo etimes,pid,cmd

다음과 같이 프로세스가 시작된 이후의 시간(초)이 포함된 목록이 제공됩니다.

ELAPSED   PID CMD
  13802 26157 /just/some/command

결과는 데이터를 추출하는 데 사용될 수 있습니다. 어떤 종류의 논리를 적용하려는지 이해할 수 없기 때문에(약 이틀 전) 정보만 출력하고 있으며 필요에 따라 스크립트를 조정하면 됩니다. 1728002 * 86400은 하루의 초 수입니다.

#!/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

답변3

하루 전에 시작된 프로세스를 미리 확인하고 싶다면 아래 단계를 따르세요.

capturing_date=$(date +%b%d -d "1 days ago")


ps -eaf |awk -v k="$capturing_date" '$5 == k {print $0"============================>  Not OK"}'

변수 Capture_date ===> 전날의 날짜를 캡처합니다.

ps -eaf |awk -v k="$capturing_date" '$5 == k {print $0"============================>  Not OK"}'   =================> it will  check for process which started 1 day earlier by evaluating in column 5

관련 정보