赞
踩
在linux系统中运行一个应用程序,通常需要使用一个shell脚本程序来启动应用程序,并且监控应用程序是否在运行,如果应用程序故障自己退出就需要通过shell脚本程序来启动它。其实shell脚本程序就是一个很简单的程序逻辑来监测一个复杂的应用程序,类似于在嵌入式软件开发中单片机中使用看门狗来监测程序是否运行,不运行了就复位芯片让程序重新运行的功能。看来在所有软件开发的过程中都存在看门狗这个角色。
下面一段是一个守护shell脚本程序的写法,这个shell脚本用于启动testplt_capalyzer_main.py程序和eiota_server两个程序。启动这两个程序后,每16秒监测一下这两个程序的进程,如果没有进程了就重新启动这两个程序。
- #!/bin/bash
- #定义一个变量,用于存储密码
- keyword="Iot001"
-
- #定义启动testplt_capalyzer_main.py程序的函数,&运行在后台
- start_acnd(){
- cd /home/eiota/testplt/python/
- echo $keyword | sudo -S python3.8 testplt_capalyzer_main.py &
- }
- #定义启动eiota_server程序的函数,&运行在后台
- start_eiota_server(){
- cd /home/eiota/testplt/
- ./eiota_server &
- }
-
- #重新启动testplt_capalyzer_main.py程序
- restart_acnd(){
- echo ""
- echo "======================== kill_acnd =========================="
- #查询testplt_capalyzer_main.py程序在运行,获取运行进程的数量,程序在运行时返回的进程数量为2,没有运行返回0, grep -v grep表示过滤掉带 grep的行,因为执行以下脚本会有一个带grep的进程,wc -l表示获取行数
- monitor=`ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | wc -l`
- if [ $monitor -ne 0 ]
- then
- #查询testplt_capalyzer_main.py程序在运行,获取运行进程的ID号, grep -v grep表示过滤掉带 grep的行,因为执行以下脚本会有一个带grep的进程,cut -c 9-5表示截取进程号, xargs表示把输入转换成命令行参数, kill - 9表示强制删除进程
- echo $keyword | sudo -S ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | cut -c 9-15 | xargs sudo kill -9
- fi
- start_acnd
- echo "============================================================="
- echo ""
- echo ""
- }
-
- endT=$(( $(date +%s) + 36000 ))
-
- while true
- do
- monitor=`ps -ef | grep "eiota_server" | grep -v grep | wc -l`
- if [ $monitor -eq 0 ]
- then
- echo "eiota_server is not running, restart program."
- start_eiota_server
- sleep 20
- restart_acnd
- fi
-
- sleep 6
-
- monitor=`ps -ef | grep "python3.8 testplt_capalyzer_main.py" | grep -v grep | wc -l`
- if [ $monitor -eq 0 ]
- then
- start_acnd
- fi
-
- sleep 10
-
- curT=$(date +%s)
- if [ $curT -gt $endT ]
- then
- echo 1 > /proc/sys/vm/drop_caches
- endT=$(( $(date +%s) + 36000 ))
- fi
- done
3、复杂脚本的执行结果记录
-
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py
- eiota 4842 9647 0 18:35 pts/1 00:00:00 grep --color=auto testplt_capalyzer_main.py
- root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
- root 30866 30864 7 7月29 ? 1-02:00:58 python3.8 testplt_capalyzer_main.py
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep
- root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
- root 30866 30864 7 7月29 ? 1-02:00:59 python3.8 testplt_capalyzer_main.py
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | wc -l
- 2
-
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py
- eiota 4842 9647 0 18:35 pts/1 00:00:00 grep --color=auto testplt_capalyzer_main.py
- root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
- root 30866 30864 7 7月29 ? 1-02:00:58 python3.8 testplt_capalyzer_main.py
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep
- root 30864 1138 0 7月29 ? 00:00:00 sudo -S python3.8 testplt_capalyzer_main.py
- root 30866 30864 7 7月29 ? 1-02:00:59 python3.8 testplt_capalyzer_main.py
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | wc -l
- 2
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | cut -c 9-15
- 30864
- 30866
- xargs 把上面的2行进行号变成一行
- eiota@eiota-Default-string:~/testplt$ ps -ef | grep testplt_capalyzer_main.py | grep -v grep | cut -c 9-15 | xargs
- 30864 30866
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。