shell 动态进程守护
2019独角兽企业重金招聘Python工程师标准>>>
config general generaloption enable 1config monitoroption name 'scplc'option enable 1option pschkstr 'sc-serv plc'option type 'application'option tmpfile '/tmp/monitor/plc.mon'option mqttkey '/app/mon/plc/status'option timeLimit 60 option execcmd ''config monitoroption name 'scgpio'option enable 1option pschkstr 'sc-serv gpio'option type 'application'option tmpfile '/tmp/monitor/gpio.mon'option mqttkey '/app/mon/gpio/status'option timeLimit 60 option execcmd ''
flash="0"
true="1"
false="0";
disable="0"
enable="1"
configName="scmonitor"
printHelp(){clearecho "USAGE:"echo "-g <monitor type> get current moitor enable status "echo "-l view current all montoir list"echo "-s <monitorName> <monitorValue> set monitor state"echo "-a autoManage "echo "-e enable cron"echo "-d disable cron"echo "add <name> <enable> <pschkstr> <sevicename> <tmpfile> <mqttkey> <execcmd> <timeLimit>"echo "example:"echo " check -l"echo " plc"echo " pjlink"echo " check -g plc"echo " current monitor state:0"echo " check -s plc 0"
}#检测线程是否存在
function_thread_check(){#count= ${ps |grep 'sc-serv plc' | grep -v 'grep' | wc -l}count=$( ps | grep "$*" | grep -v 'grep' | wc -l )if [ 0 == $count ];thenecho falseelseecho truefi
}#获取当前所有模块的名称
function_getMonitorList(){count=$(uci get $configName.general.count)for i in $(seq 0 $count);doname=$(uci get $configName.@monitor[$i].name)echo $namedone
}
#获取状态
function_getMonitorStats(){count=$(uci get $configName.general.count)for i in $(seq 0 $count);doname=$(uci get $configName.@monitor[$i].name)if [ "$name" == "$1" ]; thenstate=$(uci get $configName.@monitor[$i].enable)echo $1 stats is $statefidone
}
#获取当前的时间差
function_getTimeCompare(){currTime=$( date +%s)lastTime=$1#tmpTime= $("$currTime - $lastTime")echo $(($currTime - $lastTime))
}function_setMonitorState(){count=$(uci get $configName.general.count)for i in $(seq 0 $count);doname=$(uci get $configName.@monitor[$i].name)old_sate=$(uci get $configName.@monitor[$i].enable)if [ "$name" == "$1" ]; thenstate=$(uci set $configName.@monitor[$i].enable=$2)echo "$1 set success"fidone
}# 自动化处理流程
function_autoManage(){count=$(uci get $configName.general.count)monitorState=$(uci get $configName.general.enable)if [ $monitorState == "0" ]; thenecho "current server monitor disable"return fifor i in $(seq 0 $count);doname=$(uci get $configName.@monitor[$i].name)psChkstr=$(uci get $configName.@monitor[$i].pschkstr)tmpfile=$(uci get $configName.@monitor[$i].tmpfile)type=$(uci get $configName.@monitor[$i].type)result=$(function_thread_check $psChkstr)MonitorStats=$(uci get $configName.@monitor[$i].enable)if [ "$MonitorStats" == "$disable" ]; then echo $name current Current status is disable continue fiif [ "$result" == "false" ]; thenecho "Services have been shut down, which is restarting"#execCmd=$(uci get sc-monitor.@monitor[$i].execcmd)$(/etc/init.d/$name start)elseif [ $type == "application" ]; then #application不做文件检测echo "$name Operating normally"continuefiif [ ! -e "$tmpfile" ]; then$(/etc/init.d/$name stop)$(/etc/init.d/$name start)echo "restart $name server"continueelselastTime=$(cat $tmpfile)timeLimit=$(uci get $configName.@monitor[$i].timeLimit)result=$(function_getTimeCompare $lastTime )if [ "$result" -gt "$timeLimit" ]; then #如果当前返回的值大于允许值$(rm -rf $tmpfile)$(/etc/init.d/$name stop)$(/etc/init.d/$name start)fiecho $result $timeLimitfifiecho "$name Operating normally"done
}#移除服务
function_removeMonitor(){MonitorName=$1tmp=$(uci get $configName.general.count)for i in $(seq 0 $tmp);doname=$(uci get $configName.@monitor[$i].name)if [ "$name" == "$MonitorName" ]; thencount=$(( $tmp - 1 ))$(uci delete $configName.@monitor[$i])$(uci set $configName.general.count=$count)$(uci commit $configName)fidone
}function_EnableCron(){$(uci set $configName.general.enable=1)$(uci commit $configName)
}function_DisableCron(){$(uci set $configName.general.enable=1)$(uci commit $configName)
}[ "$(cat /proc/uptime | awk -F. '{print $1}')" -gt 300 ] || exit 0if [ "$#" -eq 0 ]; thenprintHelpexit 1
fiif [ "$1" == "-s" ]; thenif [ "$2" == "" ] || [ "$3" == "" ]; thenexit 1fifunction_setMonitorState $2 $3exit 1fiif [ "$1" == "add" ]; thenif [ "$2" == "" ]; thenecho "plese input type"exit 1fiif [ "$3" == "" ]; thenecho "plese input eanbled"exit 1fiif [ "$4" == "" ]; thenecho "plese input pschkstr"exit 1fiif [ "$5" == "" ]; thenecho "plese input sevicename "exit 1fiif [ "$6" == "" ]; thenecho "plese input tmpfile"exit 1fiif [ "$7" == "" ]; thenecho "plese input mqttkey"exit 1fiif [ "$8" == "" ]; thenecho "plese input execcmd"exit 1fiif [ "$9" == "" ]; thenecho "plese input timeLimit"exit 1fitmp=$(uci get $configName.general.count)#$count=$(( $count + 1 ))count=$(( $tmp + 1 ))$(uci add $configName monitor)$(uci add_list $configName.@monitor[$count].name="$2")$(uci add_list $configName.@monitor[$count].enable="$3")$(uci add_list $configName.@monitor[$count].pschkstr="$4")$(uci add_list $configName.@monitor[$count].servicename="$5")$(uci add_list $configName.@monitor[$count].tmpfile="$6")$(uci add_list $configName.@monitor[$count].mqttkey="$7")$(uci add_list $configName.@monitor[$count].execcmd="$8")$(uci add_list $configName.@monitor[$count].timeLimit="$9")$(uci set $configName.general.count=$count)$(uci commit $configName)exit 1
fiwhile getopts g:s:lear:d opt
docase "$opt" ing)function_getMonitorStats $OPTARG;;e)function_EnableCron;;d) function_DisableCron;;l)function_getMonitorList;;r)function_removeMonitor $OPTARG;;a)function_autoManage;;?)clearprintHelp ;;esac
done
转载于:https://my.oschina.net/u/215677/blog/758785
shell 动态进程守护相关推荐
- Python Twisted系列教程16:Twisted 进程守护
作者:dave@http://krondo.com/twisted-daemonologie/ 译者: Cheng Luo 你可以从"第一部分 Twist理论基础"开始阅读:也可 ...
- 【部署类】专题:消息队列MQ、进程守护Supervisor
目录 1 背景需求 2 技术方案 2.1 消息队列 2.2 进程守护 3 源码介绍 3.1 supervisor部分 3.1.1 supervisord.conf 内容 3.1.2 MM3D.conf ...
- android双进程守护耗电,Android实现双进程守护
做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看看这些办法是 ...
- Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- 红橙Darren视频笔记 App保活-双进程守护与JobService
App为什么会被杀死 一般情况App被杀有以下几种情况 1 手机内存不足,系统需要花费更多资源去运行优先级较高的应用 2 第三方的管理软件比如360,腾讯管家,清理进程也可能会杀死进程 Android ...
- 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3
第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...
- linux cron 进程查询,Linux下通过配置Crontab实现进程守护
我们在实际运维过程中,经常会出现某一个程序(如tomcat,perl等)的进程无缘无故就在服务器上消失了,这样的话第一我们需要投入精力去分析它为什么会消失,第二还需要配置相关检查人员,比较耗费时间. ...
- java 进程 守护进程_java jar 守护进程
java jar 守护进程 [2021-02-01 12:40:05] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...
- 关于android双进程守护-后台持续定位功能+项目IM中写到自己的即时通讯
1.关于进程守护无非就是6.0以下,6.0以上的高版本保活 a.android中6.0以下的保护采用双线程守护即可是aidl (1)创建aidl文件 interface IServiceAidlInt ...
最新文章
- 迭代器笔试题,看看你会不会?
- Apace、Ngnix、Tomcat三者关系
- muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型
- 大剑无锋之GC【面试推荐】
- shell (7)if 表达式
- Java语言学习概述
- 深度学习修炼(三)——自动求导机制
- ASP.NET 操作Cookie详解 增加,修改,删除
- 如何插入一条记录获取插入后的自动增长ID列的方法.
- ArcGIS水文分析实战教程(13)流域提取流程
- 【Scratch案例教学】Scratch九九乘法表 少儿编程Scratch创意编程案例教学
- 词霸天下---177 词根 【 -vast- = -wast- 空,荒废 】仅供学习使用
- 用python画动态皮卡丘_如何利用python绘制可爱皮卡丘?
- DFS分布式文件存储系统
- EasyTV 手机电视
- 《卓有成效的管理者》——学习心得(六)
- 8.字符串转整数(String to Integer)
- iview使用render函数渲染嵌套表格
- 【信道编码/Channel Coding】CRC校验码
- RV32I ISA 汇编指令详解
热门文章
- DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词
- 机器学习之条件随机场CRF一点理解
- 概率模型与条件随机场
- Science重磅:DeepMind再获突破,用AI开启理解电子相互作用之路
- 量化因果涌现表明:宏观可以战胜微观
- 2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...
- 如何正确地运用人工智能模型?
- 百度地图发布专网地图时空数据托管平台,构建智慧城市数字底盘
- 城市大脑,是工程问题,但首先是基础科学问题
- 资金只够支撑10个月,自动驾驶致命事故重演:特斯拉陷入困境