如何在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 日上午 00:00 之后启动。
如果是,则在该行前面打印 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 采用 HH:MM 格式;对于今天之前启动的进程,采用 MonDD;对于去年或之前启动的进程,采用 YYYY 格式,因此要报告昨天或今天启动的进程,并假设今天不是第一个进程一月,您可以只查找 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

假设您想检查提前 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

相关内容