Linux检测进程及路径

check_server_file_process

Linux检测当前除系统进程外的业务进程及其工作路径

1. 运行结果查看:

当前路径下: check_server_file.result
格式:
	ALL_CNT: [所有进程数]
	NOW_ID: [当前进程数]
	FILEPATH: 工作路径
	PID-COMMANDS: [当前服务所有进程数]
	[进程PID: 启动命令]

2. 脚本内容(可独立运行)

#!/bin/bash
# ==============================================
# 获取所有正在运行进程的(除系统进程外)
# 输出:  路径|所有pid 
# 输出文件: path_filename
# ==============================================
path_filename="check_server.filepath"
> ${path_filename}
for i in $(ls /proc/ | grep -E "\<[0-9]+\>" | sort -n )
do
    # 去掉多余信息,只保留: PID|PATH
    fileinfo_tmp=$( ls -l /proc/$i/cwd 2>/dev/null | awk '{if($(11) != "\/" && $(11) != "" && $(11) != "\/home\/muker" && $(11) != "\/data" && $(11) !~ /(\/root|\/var)/ && $(11) !~ /(\/usr\/local\/aegis)/ ) print $0}' 2>/dev/null | awk -F"proc/" '{print $2}' | awk -F"/cwd -> " '{print $1"|"$2}' | sort -t '|' -k 2 ) 
    # 获取有效的 PID、PATH
    if [ -n "${fileinfo_tmp}" ]; then
        procc_pid=$(      echo "${fileinfo_tmp}" | awk -F"|" '{print $1}' )
        procc_filepath=$( echo "${fileinfo_tmp}" | awk -F"|" '{print $2}' )
        match_cont=$( grep "${procc_filepath}" ${path_filename} )
        process_command=$(ps -ef | grep -v grep |  grep -vE "\[hostname\]" | grep "${procc_pid}" | awk '{if($2 == "'${procc_pid}'") print $0}' | cut -c 49- )
        if [ -z "${match_cont}" ]; then
            echo "${procc_filepath}|[${procc_pid}: $process_command]" >> ${path_filename}
        else
            sed -i '\|'${procc_filepath}'|d' ${path_filename}
            echo "${match_cont}|[${procc_pid}: ${process_command}]" >> ${path_filename}
        fi
    fi
done 
# =======================================================
# 列出符合认为判断你的日志类型, 读取文件: path_filename
# 输出: 
#    ID: []
#    PATH: []
#    [PID:COMMAND]: []
# 输出文件: result_filename
# =======================================================
result_filename="check_server_file.result"
> ${result_filename}
id_cnt=0
# for 循环时 会以 空格、回车 分割,修改其分割方式 IFS
# 保存当前: IFS_old=$IFS
# 修改以 \n 回车符为分割符: IFS=$'\n'
# 恢复原样: IFS=$IFS_old
IFS_old=$IFS
IFS=$'\n'
id_all_cnt=$( cat ${path_filename} | wc -l )
for line in $( cat ${path_filename} )
do
    id_cnt=$(( $id_cnt + 1 ))
    pid_cnt=$( echo "${line}" | awk -F"|" '{print NF}' )
    pid_filepath="$(  echo "${line}" | awk -F"|" '{print $1}' )"
    procc_cnt=$( echo "${line}" | awk -F"|" '{print NF}' )
    pid_cnt=$(( ${procc_cnt} - 1 ))
    echo -e "ALL_CNT: [${id_all_cnt}]\nNOW_ID: [${id_cnt}]\nFILEPATH: ${pid_filepath}\nPID-COMMANDS: [${pid_cnt}]" >> ${result_filename}
    for i in $( seq 2 ${procc_cnt} )
    do
        echo "${line}" | awk -F"|" '{print $'$i'}' >> ${result_filename}
        #echo ${pid_command}
    done
    echo -e "\n" >> ${result_filename}
done
IFS=$IFS_old
rm -rf ${path_filename}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值