check_file_modify
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# ==============================================
# 获取所有正在运行进程的(除系统进程外)
# 输出: 路径|所有pid
# ==============================================
fileinfo_tmp=$( ls -l /proc/*/cwd 2>/dev/null | awk '{if($(11) != "\/" && $(11) != "" && $(11) != "\/home\/muker" && $(11) != "\/data" && $(11) !~ /(\/root|\/var)/ && $(11) != "-bash" && $(11) !~ /(\/usr\/local\/aegis)/ ) print $0}' 2>/dev/null | awk -F"proc/" '{print $2}' | awk -F"/cwd -> " '{print $1"|"$2}' | sort -t '|' -k 2 )
function get_pid_logfd()
{
local procc_pid=$1
local logfile_name="$( ls -l /proc/${procc_pid}/fd | grep -E "nohup|.log" | awk -F"-> " '{print $2}' | uniq 2>/dev/null )"
if [[ -z "${logfile_name}" ]]; then
local is_exist_superv=$( supervisorctl status | grep -w ${procc_pid} | awk '{print $1}' )
if [ -n "${is_exist_superv}" ]; then
logfile_name="$( cat $( grep "program:${is_exist_superv}" /etc/supervisord.d/* | awk -F":" '{print $1}' ) | grep "stdout_logfile=" | awk -F"=" '{print $2}' )"
fi
fi
echo "${logfile_name}"
}
function main()
{
for i in $fileinfo_tmp
do
# 去掉多余信息,只保留: PID|PATH
# 获取有效的 PID、PATH
procc_pid=$( echo "${i}" | awk -F"|" '{print $1}' )
procc_filepath=$( echo "${i}" | awk -F"|" '{print $2}' )
local logfile_name="$( get_pid_logfd ${procc_pid} )"
if [ -z "${logfile_name}" ]; then
master_pid=$( ps -ef | grep ${procc_pid} | grep -v grep | awk '{print $3}' )
logfile_name=$( get_pid_logfd ${master_pid} )
if [ -z "${logfile_name}" ]; then
logfile_name="Null"
echo "${procc_pid}:${procc_filepath}:${logfile_name}"
continue
fi
fi
logfile_time=$( /bin/stat ${logfile_name} | grep Modify | awk -F"Modify:" '{print $2}' )
timetamp=$( date -d "${logfile_time}" +%s )
echo "${procc_pid}:${procc_filepath}:${logfile_name}:${timetamp}"
done
}
main
本文由作者按照
CC BY 4.0
进行授权