小言_互联网的博客

Linux下使用Shell脚本实现进程监控

553人阅读  评论(0)

本文介绍一种在Linux系统下为实现某些关键进程状态的实时监控而使用shell脚本的编写方法。在这里主要通过监控某些进程是否退出作为判断依据,如果某个进程退出了,则进行对应的恢复处理,如重新拉起相关的进程等。

下面介绍该脚本的实现流程。

首先生成一个名为”process_check.sh”的脚本,脚本内容如下:


   
  1. #!/bin/bash
  2. #该函数检查关键进程的状态,最终返回进程的个数。
  3. checkprocess()
  4. {
  5. # echo "checkprocess...$1"
  6. if [ "$1" = "" ];
  7. then
  8. return 1
  9. fi
  10. process_num=`ps -ef|grep "$1" |grep -v "grep" |wc -l`
  11. # echo "checkprocess num=$process_num"
  12. return $process_num
  13. }
  14. #进程如有退出,则记录相关的信息,并做相关的处理
  15. recordinfo()
  16. {
  17. # echo "check $1"
  18. if [ "$1" = "" ];
  19. then
  20. return
  21. fi
  22. #打印进程退出的时间
  23. date "+++++++++++++++++++ +%Y-%m-%d %H:%M:%S '$1' exit! +++++++++++++++++++"
  24. #重新拉起这个进程
  25. "$1" &
  26. echo "restart $1"
  27. }
  28. #检查进程的状态
  29. check()
  30. {
  31. echo "####check $1"
  32. if [ "$1" = "" ];
  33. then
  34. return
  35. fi
  36. checkprocess "$1"
  37. check_result=$?
  38. #如果该进程的个数为0,则说明该进程已经退出
  39. if [ $check_result -eq 0 ];
  40. then
  41. recordinfo "$1"
  42. # exit
  43. fi
  44. }
  45. #循环检测
  46. while [ 1 ] ; do
  47. #关键进程列表,多个进程以逗号分隔,这里以两个进程为例子。
  48. process_name="./test1,./test2"
  49. OLD_IFS="$IFS"
  50. IFS=","
  51. arr=($process_name)
  52. IFS="$OLD_IFS"
  53. for s in ${arr[@]}
  54. do
  55. check "$s"
  56. done
  57. sleep 3
  58. # echo "check loop..."
  59. done

测试验证

这里写一个简单的测试程序,代码如下:


   
  1. void main()
  2. {
  3. while( 1) {
  4. sleep( 3);
  5. }
  6. }

编译后生成两个名为“test1”,“test2”的可执行文件。

为了方便测试,可以将”process_check.sh”,”test1”,”test2”放置于同一个目录下。

  1. 运行”process_check.sh”,如下所示:

从上图可知,”test1”,”test2”刚开始并未被拉起,运行”process_check.sh”之后,检测出”test1”,”test2”不存在,则触发拉起的机制,最终”test1”,”test2”被启动了。

  1. 运行过程中kill掉某一个进程,验证”process_check.sh”是否有将该进程拉起。

由下图可知,被kill的进程最终又被拉起了。

至此,该脚本的功能已被验证完毕。

结语:在 Linux 平台下,shell 脚本监控是一个非常简单、方便的工具,它可以有效的对服务器、进程进行监控,对系统开发以及进程维护人员非常有帮助。


转载:https://blog.csdn.net/zhongcaogen/article/details/129218446
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场