免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3810 | 回复: 10
打印 上一主题 下一主题

到shell版再发一下, 这里大侠更多,一个脚本在ps的时候确看到多个进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-09 17:40 |只看该作者 |倒序浏览
TEST> ps -ewwf | grep mt_log_cron
xyz      26040 26029  0 11:50 ?        00:00:00 /bin/sh -c /usr/local/app/binary/monitor/mt_log_cron.sh >> /usr/local/app/binary/monitor/log/mt_log_cron.log 2>>/usr/local/app/binary/monitor/log/mt_log_cron.err
xyz      26044 26040  0 11:50 ?        00:00:00 /bin/bash /usr/local/app/binary/monitor/mt_log_cron.sh
xyz      26489 26044  0 11:50 ?        00:00:00 /bin/bash /usr/local/app/binary/monitor/mt_log_cron.sh
xyz      27265 11984  0 11:50 pts/15   00:00:00 grep mt_log_cron


以前没注意到,以为执行一个脚本, 只会在ps的时候看到一个进程名,但是这里竟然显示了3个..
这是咋回事啊,各位大侠?
看进程之间的关系,好像是一层一层继承下来的, 我的机器是4核的,是跟多核有关系么?

在运行的时候执行pstree看到的(这里的进程号可以忽略一下),反正mt_log_cron.sh生成了很多他自己
pstree -p 18795
cron(18795)---sh(18804)---mt_log_cron.sh(18813)---mt_log_cron.sh(19613)---mt_log_cron.sh(20476)---mt_log_cron.sh(20477)-+-awk(2047
                                                                                                                        |-awk(20480)
                                                                                                                        `-wc(20479)

论坛徽章:
0
2 [报告]
发表于 2008-09-09 17:42 |只看该作者
mt_log_cron.sh

这个脚本是干嘛用的?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2008-09-09 17:52 |只看该作者

回复 #1 king_boss 的帖子

一个脚本有可能产生多个进程,这很正常。

论坛徽章:
0
4 [报告]
发表于 2008-09-09 17:54 |只看该作者
应该是你脚本里又调用了其他的脚本

论坛徽章:
0
5 [报告]
发表于 2008-09-09 18:58 |只看该作者
原帖由 无声无息 于 2008-9-9 17:42 发表
mt_log_cron.sh

这个脚本是干嘛用的?


监控日志的流量的..........
我在楼底下贴出来吧

论坛徽章:
0
6 [报告]
发表于 2008-09-09 18:59 |只看该作者

贴出来

#!/bin/bash

export PATH="/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/bin/X11:/usr/local/app/wsl_bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/Ice/bin:"
. /usr/local/app/binary/monitor/functions

RUNNING_FILE="/usr/local/app/binary/monitor/.mt_log_cron_run"
PROC_NAME=`basename $0`

if [ -f ${RUNNING_FILE} ] ; then
    echo "${PROC_NAME} is running ... EXIT 99"  1>&2
    exit 99
fi

touch ${RUNNING_FILE}

HISTORY="1"         #采集历史数据标志
SERV_CODE=""        #监控系统服务代码
APPLICATION=""      #应用名(同ICE编程命名规范)     
SERVER=""           #服务名(同ICE编程命名规范)     
LOG_TYPE=""         #日志类型(比如说是errro 或者up 或者down 等日志类文件)
FLOW_KEY=""         #流量关键字

BASE_DIR="/data/log_server/log/day"

TIME_INTERVAL=5

SQL="select mt_log_serv_code from db_monitor.t_mt_log_config where is_valid = 'Y';"
SERV_CODE_LIST=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`

echo "$SERV_CODE_LIST" | while read SERV_CODE ; do
    SQL="SELECT CONCAT_WS(':', mt_log_serv_code, application, server, log_type, flow_key) FROM db_monitor.t_mt_log_config WHERE mt_log_serv_code = '${SERV_CODE}';"
    CONFIG_STR=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`
    #echo ${CONFIG_STR}
    #IFS=: CONFIG_ARRAY=($CONFIG_STR)
    #IFS=
    #echo ${CONFIG_ARRAY[0]}
    #echo ${CONFIG_ARRAY[1]}
    IFS=: read SERV_CODE APPLICATION SERVER LOG_TYPE FLOW_KEY <<<"$CONFIG_STR"
   
    if [ ! -d "${BASE_DIR}/${APPLICATION}/${SERVER}" ] ; then
        echo "${BASE_DIR}/${APPLICATION}/${SERVER} is not exist... EXIT 98" 1>&2
        rm ${RUNNING_FILE}
        exit 98
    fi
    cd ${BASE_DIR}/${APPLICATION}/${SERVER}
   
    while [ 1 ] ; do
        SQL="SELECT curr_date, curr_time FROM db_monitor.t_time_ctl WHERE serv_code = '${SERV_CODE}';"
        DATE_STR=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`
        read CURR_DATE CURR_TIME <<< "$DATE_STR"
        DATE_FORMAT=`echo $CURR_DATE | tr -d "-"`
        BEGIN_TIME=${CURR_TIME}
        END_DATE_TIME=`date -d "$CURR_DATE $CURR_TIME $TIME_INTERVAL minutes" +"%Y-%m-%d %H:%M:%S"`
        read END_DATE END_TIME <<< "${END_DATE_TIME}"
   
        END_DATE_TIME_FORMAT=`echo $END_DATE_TIME | tr -d ":\ -"`
        DATE_NOW=`date +"%Y%m%d%H%M%S"`
   
        if [ -n "${LOG_TYPE}" ] ; then
            LOG_FILE=${APPLICATION}"."${SERVER}"_"${LOG_TYPE}"_"${DATE_FORMAT}.log
        else
            LOG_FILE=${APPLICATION}"."${SERVER}"_"${DATE_FORMAT}.log
        fi     
        GZ_LOG_FILE="${LOG_FILE}.gz"
   
        if [ ! -f ${LOG_FILE} ] && [ ! -f ${GZ_LOG_FILE} ] ; then
                echo "[${DATE_NOW}] ${SERV_CODE} ${LOG_FILE} && ${GZ_LOG_FILE}    \"file is not exist!\""  1>&2
                break
        fi

        if [  "${END_DATE_TIME_FORMAT}" -ge "${DATE_NOW}"  ] ; then
            echo "[${DATE_NOW}] ${SERV_CODE} ${END_DATE_TIME_FORMAT}    \"end-timestamp is big than now-time!\""
            break
        fi
   
        if [ -f ${LOG_FILE} ] ; then
            FLOW=`get_flow  "$LOG_FILE" "" "$BEGIN_TIME" "$END_TIME"`
            write_table "$SERV_CODE" "${CURR_DATE}" "${BEGIN_TIME}" "${END_TIME}" "$FLOW"
        else
            FLOW=`get_gz_flow "$GZ_LOG_FILE" "" "$BEGIN_TIME" "$END_TIME"`
            write_table "$SERV_CODE" "${CURR_DATE}" "${BEGIN_TIME}" "${END_TIME}" "$FLOW"
        fi
        
        SQL="update db_monitor.t_time_ctl set last_date = '$CURR_DATE', last_time = '$CURR_TIME', curr_date= '$END_DATE', curr_time='$END_TIME', update_time=now() where serv_code = '$SERV_CODE'"
        mysql -uroot -h172.18.16.74 -s -e "${SQL}"
        
        #break  对所有历史数据都做循环,所以注释掉break
        if [ "${HISTORY}" == "0" ] ; then
            break
        fi
    done
done

rm ${RUNNING_FILE}

exit 0

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2008-09-10 07:49 |只看该作者
脚本里有管道,管道用的是内部命令,它们的进程名继承了父进程的进程名

http://bbs.chinaunix.net/thread-733138-1-1.html

论坛徽章:
0
8 [报告]
发表于 2008-09-10 08:52 |只看该作者
原帖由 waker 于 2008-9-10 07:49 发表
脚本里有管道,管道用的是内部命令,它们的进程名继承了父进程的进程名

http://bbs.chinaunix.net/thread-733138-1-1.html

好,去拜读一番:)
waker起的这么早~~~~~~~谢谢啦

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2008-09-10 09:17 |只看该作者

回复 #8 king_boss 的帖子

上面那句有歧义,改成
用管道的是内部命令比较好

论坛徽章:
0
10 [报告]
发表于 2008-09-10 11:26 |只看该作者
原帖由 waker 于 2008-9-10 09:17 发表
上面那句有歧义,改成
用管道的是内部命令比较好


好~~~~~~~PFPF
"脚本里有管道,如果用管道的是bash内部命令,它们的进程名就继承了父进程的进程名"
所谓的bash内部命令,就是用type cmd 显示的就是 cmd is a shell builtin 的那种命令

这样总结可以吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP