文章

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 进行授权