当前位置:   article > 正文

linux shell守护脚本的详解

linux shell守护脚本

 1、前言

     在linux系统中运行一个应用程序,通常需要使用一个shell脚本程序来启动应用程序,并且监控应用程序是否在运行,如果应用程序故障自己退出就需要通过shell脚本程序来启动它。其实shell脚本程序就是一个很简单的程序逻辑来监测一个复杂的应用程序,类似于在嵌入式软件开发中单片机中使用看门狗来监测程序是否运行,不运行了就复位芯片让程序重新运行的功能。看来在所有软件开发的过程中都存在看门狗这个角色。

   2、shell脚本的写法

       下面一段是一个守护shell脚本程序的写法,这个shell脚本用于启动testplt_capalyzer_main.py程序和eiota_server两个程序。启动这两个程序后,每16秒监测一下这两个程序的进程,如果没有进程了就重新启动这两个程序。

  1. #!/bin/bash
  2. #定义一个变量,用于存储密码
  3. keyword="Iot001"
  4. #定义启动testplt_capalyzer_main.py程序的函数,&运行在后台
  5. start_acnd(){
  6. cd /home/eiota/testplt/python/
  7. echo $keyword | sudo -S python3.8 testplt_capalyzer_main.py &
  8. }
  9. #定义启动eiota_server程序的函数,&运行在后台
  10. start_eiota_server(){
  11. cd /home/eiota/testplt/
  12. ./eiota_server &
  13. }
  14. #重新启动testplt_capalyzer_main.py程序
  15. restart_acnd(){
  16. echo ""
  17. echo "======================== kill_acnd =========================="
  18. #查询testplt_capalyzer_main.py程序在运行,获取运行进程的数量,程序在运行时返回的进程数量为2,没有运行返回0, grep -v grep表示过滤掉带 grep的行,因为执行以下脚本会有一个带grep的进程,wc -l表示获取行数
  19. monitor=`ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | wc -l`
  20. if [ $monitor -ne 0 ]
  21. then
  22. #查询testplt_capalyzer_main.py程序在运行,获取运行进程的ID号, grep -v grep表示过滤掉带 grep的行,因为执行以下脚本会有一个带grep的进程,cut -c 9-5表示截取进程号, xargs表示把输入转换成命令行参数, kill - 9表示强制删除进程
  23. echo $keyword | sudo -S ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | cut -c 9-15 | xargs sudo kill -9
  24. fi
  25. start_acnd
  26. echo "============================================================="
  27. echo ""
  28. echo ""
  29. }
  30. endT=$(( $(date +%s) + 36000 ))
  31. while true
  32. do
  33. monitor=`ps -ef | grep "eiota_server" | grep -v grep | wc -l`
  34. if [ $monitor -eq 0 ]
  35. then
  36. echo "eiota_server is not running, restart program."
  37. start_eiota_server
  38. sleep 20
  39. restart_acnd
  40. fi
  41. sleep 6
  42. monitor=`ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | wc -l`
  43. if [ $monitor -eq 0 ]
  44. then
  45. start_acnd
  46. fi
  47. sleep 10
  48. curT=$(date +%s)
  49. if [ $curT -gt $endT ]
  50. then
  51. echo 1 > /proc/sys/vm/drop_caches
  52. endT=$(( $(date +%s) + 36000 ))
  53. fi
  54. done

3、复杂脚本的执行结果记录

      

  1. eiota@eiota-Default-string:~/testplt$
  2. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py
  3. eiota 4842 9647 0 18:35 pts/1 00:00:00 grep --color=auto testplt_capalyzer_main.py
  4. root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
  5. root 30866 30864 7 7月29 ? 1-02:00:58 python3.8 testplt_capalyzer_main.py
  6. eiota@eiota-Default-string:~/testplt$
  7. eiota@eiota-Default-string:~/testplt$
  8. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep
  9. root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
  10. root 30866 30864 7 7月29 ? 1-02:00:59 python3.8 testplt_capalyzer_main.py
  11. eiota@eiota-Default-string:~/testplt$
  12. eiota@eiota-Default-string:~/testplt$
  13. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | wc -l
  14. 2

  1. eiota@eiota-Default-string:~/testplt$
  2. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py
  3. eiota 4842 9647 0 18:35 pts/1 00:00:00 grep --color=auto testplt_capalyzer_main.py
  4. root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
  5. root 30866 30864 7 7月29 ? 1-02:00:58 python3.8 testplt_capalyzer_main.py
  6. eiota@eiota-Default-string:~/testplt$
  7. eiota@eiota-Default-string:~/testplt$
  8. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep
  9. root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
  10. root 30866 30864 7 7月29 ? 1-02:00:59 python3.8 testplt_capalyzer_main.py
  11. eiota@eiota-Default-string:~/testplt$
  12. eiota@eiota-Default-string:~/testplt$
  13. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | wc -l
  14. 2
  15. eiota@eiota-Default-string:~/testplt$
  16. eiota@eiota-Default-string:~/testplt$
  17. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | cut -c 9-15
  18. 30864
  19. 30866
  20. xargs 把上面的2行进行号变成一行
  21. eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | cut -c 9-15 | xargs
  22. 30864 30866

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/639486
推荐阅读
相关标签
  

闽ICP备14008679号