免费注册 查看新帖 |

Chinaunix

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

[其他] 求助,这样的脚本这么写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-26 17:09 |只看该作者 |倒序浏览
就是写一个脚本隔半小时ps HPUNIX服务器中的进程,发现睡眠(s)的进程就自动kill,如果可能的话,脚本要能扫描几个指定进程。哪位高人给指点一下哦,谢谢了!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2013-08-27 08:24 |只看该作者
请把你的ps命令的结果(要包含s的)贴出来看看,我可以帮忙写脚本。

论坛徽章:
1
摩羯座
日期:2013-09-28 17:07:31
3 [报告]
发表于 2013-08-27 12:42 |只看该作者
本帖最后由 hanfeng122525 于 2013-08-27 12:53 编辑

#!/bin/bash

ps aux >> stat

while read line
do
            if [ `echo $line|awk '{print $8}'` = "S" ]
            then
                         pid=`echo $line|awk '{print $2}'`
                         kill $pid
            fi
done < stat


计划任务;;corntab

或者



while true
do
          ps aux >> stat

             while read line
             do
                       if [ `echo $line|awk '{print $8}'` = "S" ]
                       then
                            pid=`echo $line|awk '{print $2}'`
                            kill $pid
                       fi
             done < stat

sleep 1800
done

论坛徽章:
0
4 [报告]
发表于 2013-08-27 17:08 |只看该作者
围观看高手解答!!!

论坛徽章:
0
5 [报告]
发表于 2013-08-27 20:40 |只看该作者
回复 2# Shell_HAT

一次ps查询状态为?的进程结果:

xry      4507  0.8  0.1  3336  720 pts/2    ?   17:38   0:00  ./aps_ora_A
xry      4510  0.7  0.0     0    0 pts/2   ?   17:38   0:02    ./bps3
xry      4513  0.5  0.0     0    0 pts/2   ?    17:38   0:03    ./app1
xry       4432   0.5  0.0     0    0 pts/2   ?    17:38   0:03   ./app2
xry       4465   0.5  0.0     0    0 pts/2    ?    17:38   0:03  ./bps5
xry       4432   0.4  0.0     0    0 pts/2    ?    17:38   0:03  ./app1
xry       4413   0.5  0.0     0    0 pts/2    ?    17:38   0:03  ./aps_ora_A
xry       4232   0.2  0.0     0    0 pts/2    ?    17:38   0:03  ./aps_send_B
xry       4122   0.2  0.0     0    0 pts/2    ?    17:38   0:03  ./aps_send_D
xry       4772   0.1  0.0     0    0 pts/2    ?    17:38   0:03  ./aps_send_C

实际是每30分钟发起一次ps,扫描指定的这18个进程 ./aps_ora_A、  ./aps_ora_B、  ./aps_ora_C 、  ./aps_ora_D、./bps1、./bps2、./bps3、./bps4、./bps35、
./app1、./app2、./app3、./app4、./app5、./aps_send_A、./aps_send_B、./aps_send_C、./aps_send_D是否状态为?,用户是xry,如果扫描到则自动kill,具体脚本
能帮我写一个不哦?




  



论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
6 [报告]
发表于 2013-08-28 14:20 |只看该作者
回复 5# 25678909
  1. #!/bin/ksh
  2. set -A arrayProcess ./aps_ora_A ./aps_ora_B ./aps_ora_C ./aps_ora_D ./bps1 ./bps2 ./bps3 ./bps4 ./bps5 \
  3. ./app1 ./app2 ./app3 ./app4 ./app5 ./aps_send_A ./aps_send_B ./aps_send_C ./aps_send_D
  4. PS_RESULT=`ps xxxxxxxxxxx PUT YOUR REAL PS COMMAND HERE xxxxxxxxxxx`
  5. for((i=0;i<=17;i++)); do
  6.     echo "$PS_RESULT" | grep "${arrayProcess[$i]}" | awk '{if($8=="?")print "kill -9 "$2}'
  7.     # echo "$PS_RESULT" | grep "${arrayProcess[$i]}" | awk '{if($8=="?")print "kill -9 "$2}' | sh
  8. done
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-08-28 20:13 |只看该作者
while true
do
ps -elf >>stat
while read line

do
    if [`echo $line|awk '{print $2}' `="Z"] && [`echo $line|awk '{print $3}' `="xry"]
then
   pid=`echo $line|awk '{print $2}{print $3}'`
kill $pid
fi
done <stat
sleep 60
done

哪位前辈帮我瞧瞧这段错在哪里?($2是进程状态字段,$3是进程所属用户,本意是当查到进程状态为Z且该进程用户为xry时则自动kill掉),谢谢,在线等!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2013-08-29 17:32 |只看该作者
回复 7# 25678909


    报错信息是什么?

论坛徽章:
0
9 [报告]
发表于 2013-08-29 17:53 |只看该作者
本帖最后由 25678909 于 2013-08-29 18:02 编辑

回复 8# Shell_HAT


while true
do
ps -elf >>stat
while read line

do
    if [`echo $line|awk '{print $2}' `="Z"]
then
   pid=`echo $line|awk '{print $2}'`
kill $pid
fi
done <stat
sleep 60
done

我精简改成这样了,显示结果为:
test-k[6] [S=Z] not found
test-k[6] [S=Z] not found
test-k[6] [S=Z] not found
test-k[6] [R=Z] not found
test-k[6] [S=Z] not found
test-k[6] [Z=Z] not found
test-k[6] [S=Z] not found
test-k[6] [S=Z] not found
test-k[6] [S=Z] not found
......
test-k[6] [S=Z] not found
test-k[6] [root=Z] not found
test-k[6] [root=Z] not found
test-k[6] [root=Z] not found
test-k[6] [xry=Z] not found
test-k[6] [xry=Z] not found
test-k[6] [S=Z] not found
......

然后再手动运行ps -el |grep Z,发现Z状态进程都还在,手动kill -9 可以杀掉,说明这段脚本没起作用啊!而且你看显示结果我标红的地方也是不对劲吧?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
10 [报告]
发表于 2013-08-29 18:02 |只看该作者
回复 9# 25678909


if [ `echo $line|awk '{print $2}'` == "Z" ]
方括号两边需要空格
等号两边需要空格
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP