"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日前)、情報だけを出力しており、必要に応じてスクリプトを調整するだけです。172800
2 * 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