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

結果を使用してデータを抽出できます。どのようなロジックを適用しようとしているのか理解できないため(約2日前)、情報だけを出力しており、必要に応じてスクリプトを調整するだけです。1728002 * 86400は1日の秒数です。

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

1日前に開始されたプロセスを事前に確認したい場合は、次の手順に従ってください。

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

関連情報