"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}'