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 动态进程守护相关推荐

  1. Python Twisted系列教程16:Twisted 进程守护

    作者:dave@http://krondo.com/twisted-daemonologie/  译者: Cheng Luo 你可以从"第一部分 Twist理论基础"开始阅读:也可 ...

  2. 【部署类】专题:消息队列MQ、进程守护Supervisor

    目录 1 背景需求 2 技术方案 2.1 消息队列 2.2 进程守护 3 源码介绍 3.1 supervisor部分 3.1.1 supervisord.conf 内容 3.1.2 MM3D.conf ...

  3. android双进程守护耗电,Android实现双进程守护

    做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看看这些办法是 ...

  4. Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  5. 红橙Darren视频笔记 App保活-双进程守护与JobService

    App为什么会被杀死 一般情况App被杀有以下几种情况 1 手机内存不足,系统需要花费更多资源去运行优先级较高的应用 2 第三方的管理软件比如360,腾讯管家,清理进程也可能会杀死进程 Android ...

  6. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3

    第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...

  7. linux cron 进程查询,Linux下通过配置Crontab实现进程守护

    我们在实际运维过程中,经常会出现某一个程序(如tomcat,perl等)的进程无缘无故就在服务器上消失了,这样的话第一我们需要投入精力去分析它为什么会消失,第二还需要配置相关检查人员,比较耗费时间. ...

  8. java 进程 守护进程_java jar 守护进程

    java jar 守护进程 [2021-02-01 12:40:05]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  9. 关于android双进程守护-后台持续定位功能+项目IM中写到自己的即时通讯

    1.关于进程守护无非就是6.0以下,6.0以上的高版本保活 a.android中6.0以下的保护采用双线程守护即可是aidl (1)创建aidl文件 interface IServiceAidlInt ...

最新文章

  1. 迭代器笔试题,看看你会不会?
  2. Apace、Ngnix、Tomcat三者关系
  3. muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型
  4. 大剑无锋之GC【面试推荐】
  5. shell (7)if 表达式
  6. Java语言学习概述
  7. 深度学习修炼(三)——自动求导机制
  8. ASP.NET 操作Cookie详解 增加,修改,删除
  9. 如何插入一条记录获取插入后的自动增长ID列的方法.
  10. ArcGIS水文分析实战教程(13)流域提取流程
  11. 【Scratch案例教学】Scratch九九乘法表 少儿编程Scratch创意编程案例教学
  12. 词霸天下---177 词根 【 -vast- = -wast- 空,荒废 】仅供学习使用
  13. 用python画动态皮卡丘_如何利用python绘制可爱皮卡丘?
  14. DFS分布式文件存储系统
  15. EasyTV 手机电视
  16. 《卓有成效的管理者》——学习心得(六)
  17. 8.字符串转整数(String to Integer)
  18. iview使用render函数渲染嵌套表格
  19. 【信道编码/Channel Coding】CRC校验码
  20. RV32I ISA 汇编指令详解

热门文章

  1. DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词
  2. 机器学习之条件随机场CRF一点理解
  3. 概率模型与条件随机场
  4. Science重磅:DeepMind再获突破,用AI开启理解电子相互作用之路
  5. 量化因果涌现表明:宏观可以战胜微观
  6. 2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...
  7. 如何正确地运用人工智能模型?
  8. 百度地图发布专网地图时空数据托管平台,构建智慧城市数字底盘
  9. 城市大脑,是工程问题,但首先是基础科学问题
  10. 资金只够支撑10个月,自动驾驶致命事故重演:特斯拉陷入困境