2024-05-01 shellscript
仕事で使いそうなのでメモ。以下は httpd プロセスの場合。
#!/bin/bash
# 検索対象のプロセス名
process_name="httpd"
# 起動してからこの秒数を超えている process_name を拾う。とりあえず24時間
threshold_second=$((60*60*24))
# 現在時間のタイムスタンプを取得
current_time=$(date +%s)
# process_name に紐づく pid を探しループ処理
for pid in $(pgrep -f $process_name); do
# プロセスが起動したタイムスタンプを取得
start_time=$(stat -c %Y "/proc/$pid")
# 起動してから何秒経っているか計算
elapsed_time=$((current_time - start_time))
# threshold_second 秒経過していたらecho
if [ $elapsed_time -ge $threshold_second ]; then
echo "$pid $elapsed_time"
fi
done
実行するとこんな感じ。
$ ./test.sh
5607 223851
15955 247251
21453 309771
21455 309771
21456 309771
21458 309771
24004 4412707
実際のプロセスも見てみる。あってるぽい。
$ ps -eo pid,comm,lstart,args | grep httpd | grep -v grep
5607 httpd Mon Apr 29 03:41:12 2024 /usr/sbin/httpd -DFOREGROUND
9092 httpd Tue Apr 30 18:39:39 2024 /usr/sbin/httpd -DFOREGROUND
15955 httpd Sun Apr 28 21:11:40 2024 /usr/sbin/httpd -DFOREGROUND
21453 httpd Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21455 httpd Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21456 httpd Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21458 httpd Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
24004 httpd Mon Mar 11 16:07:45 2024 /usr/sbin/httpd -DFOREGROUND
27071 httpd Wed May 1 09:24:11 2024 /usr/sbin/httpd -DFOREGROUND
30984 httpd Wed May 1 10:32:52 2024 /usr/sbin/httpd -DFOREGROUND
31085 httpd Wed May 1 10:34:38 2024 /usr/sbin/httpd -DFOREGROUND
31105 httpd Wed May 1 10:34:59 2024 /usr/sbin/httpd -DFOREGROUND