"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
결과는 데이터를 추출하는 데 사용될 수 있습니다. 어떤 종류의 논리를 적용하려는지 이해할 수 없기 때문에(약 이틀 전) 정보만 출력하고 있으며 필요에 따라 스크립트를 조정하면 됩니다. 172800
2 * 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