免费注册 查看新帖 |

Chinaunix

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

帮帮忙。shell的问题!!(高手)  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-04-17 14:04 |只看该作者 |倒序浏览
公司是做软件开发的,程序员们的程序都要连接数据库进行调试。可是他们的程序死了以后
数据库还是连接的,这样一来系统的资源(内存)就会被占用被耗尽,于是我就要经常去杀死已经死了的进程,可是这样很麻烦,我想编一个shell脚本,可不知道如何下手,就请大虾们帮帮忙了:-)
例如下面这些 323 325 。。。。。。。。。335 337 这些进程不能被杀,主要是要杀后面有(LOCAL=NO)的进程。  我因该怎么做呀?
oracle 14527     1  0 10:22:39 ?        0:01 oraclextecs90 (LOCAL=NO)
oracle 16865     1  0 11:01:46 ?        0:06 oraclextecs90 (LOCAL=NO)
oracle 24346     1  0 00:00:52 ?        0:01 oraclextecs90 (LOCAL=NO)
oracle 24802     1  0 13:19:32 ?        0:03 oraclextecs90 (LOCAL=NO)
oracle   323     1  0   Apr 12 ?        0:01 ora_pmon_xtecs90
oracle   325     1  0   Apr 12 ?        1:35 ora_dbw0_xtecs90
oracle   327     1  0   Apr 12 ?        2:45 ora_lgwr_xtecs90
oracle   329     1  0   Apr 12 ?        2:45 ora_ckpt_xtecs90
oracle   331     1  0   Apr 12 ?        1:54 ora_smon_xtecs90
oracle   333     1  0   Apr 12 ?        0:00 ora_reco_xtecs90
oracle   335     1  0   Apr 12 ?        0:00 ora_s000_xtecs90
oracle   337     1  0   Apr 12 ?        0:00 ora_d000_xtecs90
oracle 14229     1  0 10:17:29 ?        0:00 oraclextecs90 (LOCAL=NO)
oracle 23079     1  0 22:58:31 ?        0:00 oraclextecs90 (LOCAL=NO)
oracle  1117     1  0 14:45:31 ?        0:47 oraclextecs90 (LOCAL=NO)
问题的补充:要杀连接已经超时了的进程(时间大于30分钟),而不是要杀死所有的LOCAL=NO进程。

论坛徽章:
0
2 [报告]
发表于 2002-04-17 16:40 |只看该作者

帮帮忙。shell的问题!!(高手)

ps -e -o pid -o time -o args|grep LOCAL=NO>/tmp/tmpfile  #把符合条件的进程放到临时文件中
cat /tmp/tmpfile|while read LINE
do
TIME=`echo $LINE|awk '{print $2}'`       #取出进程运行时间
TIME=`echo $TIME|awk -F: '{print $1}'`   #取出共运行多少分钟的数目
TIME=`expr $TIME / 1`
if [ $TIME -gt 30 ]                       #判断是否大于半小时
then
echo $LINE                   #将符合条件的进程信息输出
fi
done
rm -f /tmp/tmpfile

#现在有了进程信息,要杀要剐就随你便了!

论坛徽章:
0
3 [报告]
发表于 2002-04-17 16:48 |只看该作者

帮帮忙。shell的问题!!(高手)

TIME说明:
如果进程运行时间小于1小时,就显示为mm:ss。例如运行了15分钟23秒,就显示为15:23。
如果进程运行时间大于1小时,就显示为hh:mm:ss。例如运行了1小时15分钟23秒,就显示为01:15:23。
因为你每半小时就杀一回,我想你要杀的进程应该不会出现运行时间大于1小时的情况,所以就简化了程序。

论坛徽章:
0
4 [报告]
发表于 2002-04-17 16:50 |只看该作者

帮帮忙。shell的问题!!(高手)

问题是个好问题。可干吗非要起一个帮帮忙的含糊名字呢?

论坛徽章:
0
5 [报告]
发表于 2002-04-17 17:01 |只看该作者

帮帮忙。shell的问题!!(高手)

楼上的兄弟,我试了不行呀?

论坛徽章:
0
6 [报告]
发表于 2002-04-17 17:11 |只看该作者

帮帮忙。shell的问题!!(高手)

使用sh

论坛徽章:
0
7 [报告]
发表于 2002-04-17 17:31 |只看该作者

帮帮忙。shell的问题!!(高手)

你有什么报错?

论坛徽章:
0
8 [报告]
发表于 2002-04-17 18:44 |只看该作者

帮帮忙。shell的问题!!(高手)

我把你的脚本简化了,就让他运行一次结果报错
expr: syntax error
./kill_shell.or: [: -gt: unary operator expected
简化的脚本是:
ps -e -o pid -o time -o args|grep LOCAL=NO>/tmp/tmpfile  
cat /tmp/tmpfile| read LINE
TIME=`echo $LINE|awk '{print $2}'`      
TIME=`echo $TIME|awk -F: '{print $1}'`   
TIME=`expr $TIME / 1`
if [ $TIME -gt 30 ]                     
then
echo $LINE                 
fi

论坛徽章:
0
9 [报告]
发表于 2002-04-17 19:34 |只看该作者

帮帮忙。shell的问题!!(高手)

不好意思,我一直都在BASH下,忘了进 SH 了现在可以了。
你可以把awk的用法给我讲讲吗?

论坛徽章:
0
10 [报告]
发表于 2002-04-17 20:11 |只看该作者

帮帮忙。shell的问题!!(高手)

运行脚本没有提示错误信息,可是好象还有问题:我把你的脚本改了一点:
then
echo $LINE (我给改成 KILL -9 &LINE)                 
fi
先看了一下进程
  oracle   337     1  0   Apr 12 ?        0:00 ora_d000_xtecs90
  oracle   511     1  0   Apr 12 ?       12:59 /export/home/oracle/product/8.1.t
    root 19197 16506  0 20:03:41 pts/5    0:00 grep oracle
  oracle 18597     1  0 19:54:21 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 19061     1  0 20:01:19 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 18657     1  0 19:56:00 ?        0:01 oraclextecs90 (LOCAL=NO)
  oracle 18531     1  0 19:53:35 ?        0:02 oraclextecs90 (LOCAL=NO)
  oracle 19196     1  1 20:03:40 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 15111     1  0 19:03:36 ?        0:01 oraclextecs90 (LOCAL=NO)
  oracle 16615     1  0 19:33:05 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 13892     1  0 18:14:50 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 18114     1  0 19:49:20 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 19188     1  2 20:03:28 ?        0:01 oraclextecs90 (LOCAL=NO)
  oracle 16257     1  0 19:28:25 ?        0:00 oraclextecs90 (LOCAL=NO)
# date
Wed Apr 17 20:03:59 CST 2002
运行了这个脚本后
  oracle   331     1  0   Apr 12 ?        1:58 ora_smon_xtecs90
  oracle   333     1  0   Apr 12 ?        0:00 ora_reco_xtecs90
  oracle   335     1  0   Apr 12 ?        0:00 ora_s000_xtecs90
  oracle   337     1  0   Apr 12 ?        0:00 ora_d000_xtecs90
  oracle   511     1  0   Apr 12 ?       13:00 /export/home/oracle/product/8.1.t
    root 19518 19440  0 20:10:36 pts/2    0:00 grep oracle
  oracle 18597     1  0 19:54:21 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 19061     1  0 20:01:19 ?        0:01 oraclextecs90 (LOCAL=NO)
  oracle 18657     1  0 19:56:00 ?        0:01 oraclextecs90 (LOCAL=NO)
  oracle 18531     1  1 19:53:35 ?        0:05 oraclextecs90 (LOCAL=NO)
  oracle 15111     1  0 19:03:36 ?        0:02 oraclextecs90 (LOCAL=NO)
  oracle 16615     1  0 19:33:05 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 13892     1  0 18:14:50 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 18114     1  0 19:49:20 ?        0:00 oraclextecs90 (LOCAL=NO)
  oracle 16257     1  0 19:28:25 ?        0:00 oraclextecs90 (LOCAL=NO)
# date
Wed Apr 17 20:11:08 CST 200
没有变化,应该把 13892  15111 杀死的呀 为什么没有呀?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP