免费注册 查看新帖 |

Chinaunix

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

Linux 多进程监控脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-13 14:45 |只看该作者 |倒序浏览
切入主题:

假如我知道有进程A、B、C、D,我想知道它们在后台是否都在正常的运行,
ps查看进程:
1.如果进程 A、B、C、D 都正常运行,则睡眠;
2.如果进程 A、B、C、D 中有进程不在运行,则启动不在运行的进程;

请大家集思广益,这个脚本折腾了3三个星期了,不知道如果下手写。

=========================================
个人想法:请大家修改:
新建个零时文件,包含想要监控的进程名称:pro_temp 内容包括:
A
B
C
D
#! /bin/bash
ps -ef|grep **|grep -v grep > tempfile
#假如文件tempfile包括:
A
C
diff  pro_temp tempfile|tail -n +2|tr -d '<' >tempfile1
#零时文件tempfile1内容:
B
D
#循环零时文件tempfile1,判断程序进程是否存在case循环中,如果在,则启动,
for LOOP in `cat tempfile1`
do
    case $LOOP in
         A)
           start A
           ;;
         B)
           start B
           ;;
          C)
           start C
           ;;
          D)
          start D
          ;;
          *)
          exit 0
          ;;      
    esac
    sleep 360
    rm -f tempfile
    rm -f tempfile1
done

问题:在shell脚本中,diff命令可以这么用吗???shell脚本中的diff命令如果对比系统中存在的文件。

[ 本帖最后由 ontherd 于 2009-4-14 15:11 编辑 ]

论坛徽章:
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
2 [报告]
发表于 2009-04-13 14:53 |只看该作者
参考/etc/rc.d/init.d中的任一脚本

论坛徽章:
0
3 [报告]
发表于 2009-04-13 17:21 |只看该作者
放在inittab中运行

论坛徽章:
0
4 [报告]
发表于 2009-04-13 17:37 |只看该作者

回复 #1 ontherd 的帖子

ps |grep

应该可以实现吧

论坛徽章:
0
5 [报告]
发表于 2009-04-13 18:15 |只看该作者
while true;do
ps |grep
sleep 300
done

论坛徽章:
0
6 [报告]
发表于 2009-04-13 19:48 |只看该作者
  1. #!/bin/bash


  2. ps -ef |grep A |grep -v grep >/dev/null 2>&1
  3. while  [ $? -ne 0 ]
  4. do
  5.      start A
  6.      sleep 10
  7.      ps -ef |grep A |grep -v grep >/dev/null 2>&1
  8. done


  9. ps -ef |grep B |grep -v grep >/dev/null 2>&1
  10. while  [ $? -ne 0 ]
  11. do
  12.      start B
  13.      sleep 10
  14.      ps -ef |grep B |grep -v grep >/dev/null 2>&1
  15. done
  16. ps -ef |grep C |grep -v grep >/dev/null 2>&1
  17. while  [ $? -ne 0 ]
  18. do
  19.      start C
  20.      sleep 10
  21.      ps -ef |grep C |grep -v grep >/dev/null 2>&1
  22. done
  23. ps -ef |grep D |grep -v grep >/dev/null 2>&1
  24. while  [ $? -ne 0 ]
  25. do
  26.      start D
  27.      sleep 10
  28.      ps -ef |grep D |grep -v grep >/dev/null 2>&1
  29. done
复制代码

论坛徽章:
0
7 [报告]
发表于 2009-04-13 20:02 |只看该作者

回复 #6 我是DBA 的帖子

还好只有A B C D 若二十六个全来了,怎么办?

另,lz
2.如果进程 A、B、C、D 中有进程不在运行,则启动不在运行的进程;
不大明白,是程序吗?

论坛徽章:
0
8 [报告]
发表于 2009-04-14 14:11 |只看该作者

回复 #7 haimming 的帖子

这些都程序进程,是我们工程师开发的C程序,我监控不了这么多程序,所以要写个脚本来完成。

论坛徽章:
0
9 [报告]
发表于 2009-04-14 17:54 |只看该作者
难道这个问题太简单了,
大侠们都不愿意下手。

论坛徽章:
0
10 [报告]
发表于 2009-04-14 18:12 |只看该作者
给你些想法:
1、脚本加到cron里定时启动检查即可,不需要一直sleep;
2、检查动作其实是一致的,所以可以把检查重启的操作写成function;
3、为提高灵活性,例子中的A、B、C、D可以写到config里,并加入程序所在的目录路径,检查和重启均根据config处理,以后维护config即可;
4、如果是网络程序,建议通过nc判断端口是否处于监听状态,而不是用ps判断进程是否存在。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP