[关闭]
@cyysu 2017-10-13T10:53:01.000000Z 字数 3084 阅读 793

Linux网关启动脚本

  • 时间:2017年10月13日
  • 作者:Kali
  • 邮箱:cyysu.github.io@gmail.com
  • 版本:3.0
  • 描述:启动脚本,控制协议栈进程的启动

脚本编写


脚本内容

  1. #!/bin/bash
  2. #==============================================================================
  3. # Author : MJ_DZ chenyuan
  4. #
  5. # Email : cyysu.github.io@gmail.com
  6. #
  7. # Last modified : 2017-09-18 12:03
  8. #
  9. # Filename : 桌面/startall.sh
  10. #
  11. # Description : 启动协议栈以及上抛进程
  12. #==============================================================================
  13. # 相对路径
  14. readonly PROGDIR=$(readlink -f $(dirname $0))
  15. # 全局变量
  16. NEWTON=NEWTON_V2
  17. MQTT=SCADA_MQTT
  18. OPCUA=OPEN62541_V02
  19. MODBUS=LIBMODBUS
  20. paraCount=0
  21. paraArray=(0)
  22. # 1. Iterate through the incoming parameters and wrap the parameters into arrays
  23. # arg0: xml
  24. # arg1: process
  25. for args in $@
  26. do
  27. paraArray[$paraCount]=$args
  28. let paraCount++
  29. done
  30. # 2. 启动上抛数据进程,首先判断文件是否具有可执行权限,其次判断当前进程是否存在,然后判断XML文件是否存在
  31. function startProcess(){
  32. [ ! -x $PROGDIR/$1 ] && (chmod +x $PROGDIR/$1)
  33. if [ -f $PROGDIR/$1 ] && [[ -f $PROGDIR/${paraArray[0]} ]];then
  34. $PROGDIR/$1 ${paraArray[0]} #>/dev/null 2&>1 &
  35. fi
  36. }
  37. # 3. Read the XML configuration or manual input to see which process is thrown
  38. function findTcp(){
  39. # 如果参数大于/等于2 那么将会采取手动输入启动程序名字
  40. if [[ $2 -gt 2 ]];then
  41. paramName=$3
  42. else
  43. # read xml config file
  44. paramName=`grep "<test>" $1 | cut -d ">" -f 2 | cut -d "<" -f 1`
  45. fi
  46. # switch case
  47. case $paramName in
  48. MODBUS)
  49. echo -e "\033[32m[INFO] 启动MODBUS进程\033[0m"
  50. startProcess $MODBUS
  51. ;;
  52. OPCUA)
  53. echo -e "\033[32m[INFO] 启动OPCUA进程\033[0m"
  54. startProcess $OPCUA
  55. ;;
  56. MQTT)
  57. echo -e "\033[32m[INFO] 启动MQTT进程\033[0m"
  58. startProcess $MQTT
  59. ;;
  60. *)
  61. echo -e "\033[32m[INFO] 默认启动MQTT进程\033[0m"
  62. startProcess $MQTT
  63. ;;
  64. esac
  65. }
  66. # 4. 程序看门狗
  67. function watchdog(){
  68. pidList=`ps -ef | grep $1 | grep -v grep | awk '{print $1}'`
  69. ps -ef | grep $1 | grep -v grep
  70. for list in $pidList
  71. do
  72. kill -9 $list >/dev/null 2&>1
  73. #echo -e "\033[41m[INFO] 等待15S,如果未输入任何字符,程序将自行启动!!!\033[0m"
  74. #read -t 15 -p "请输入选项N/n: " input
  75. #if [[ $input == "n" || $input == "N" ]];then
  76. # exit 1
  77. #fi
  78. done
  79. }
  80. # 5. 程序状态
  81. function paraState(){
  82. #USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  83. #mj 8011 0.0 0.0 6764 776 pts/1 S+ 15:33 0:00 ./NEWTON_V2
  84. pidstate=`top -b -n 1 | grep $1 | grep -v grep | awk '{print $8}'`
  85. for file in $pidstate
  86. do
  87. if [[ $file != "S+" || $file != "S" ]];then
  88. echo findTcp $2 $3 $1
  89. watchdog $1 && findTcp $2 $3 $1
  90. fi
  91. done
  92. }
  93. # 清除上一次执行的所有状态
  94. watchdog $NEWTON
  95. watchdog $OPCUA
  96. watchdog $MQTT
  97. watchdog $MODBUS
  98. # 调试接口,避免后台一直运行
  99. if [[ $1 == "clean" ]];then
  100. if [[ ! -n "$2" ]];then
  101. exit
  102. else
  103. watchdog $2
  104. exit
  105. fi
  106. fi
  107. # 先启动上抛进程,然后启动底层协议栈
  108. if [[ $# -gt 0 ]];then
  109. findTcp $1 $# $2 &
  110. else
  111. echo -e "\033[41m[ERROR] 请输入配置文件参数\033[0m"
  112. exit
  113. fi
  114. # 如果命令行参数大于2,也就是3个以上, 那么将会启动命令行中的应用
  115. # 如果参数为1或者2 都将会读取配置文件,如果无法匹配配置文件的内容那么将会默认启动MQTT
  116. echo -e "\033[32m[INFO] 启动NEWTON进程\033[0m"
  117. $PROGDIR/$NEWTON $PROGDIR/$1 &
  118. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以下为调试信息<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  119. #echo "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND"
  120. #echo "========================================================================================="
  121. #ps -aux | grep NEWTON | grep -v grep
  122. #ps -aux | grep OPEN | grep -v grep
  123. #ps -aux | grep MODBUS | grep -v grep
  124. #ps -aux | grep MQTT | grep -v grep
  125. #echo "========================================================================================="
  126. #$PROGDIR/$OPCUA $PROGDIR/$1 &
  127. #$PROGDIR/$MODBUS $PROGDIR/$1 >/dev/null 2&>1 &
  128. #$PROGDIR/$MQTT $PROGDIR/$1 >/dev/null 2&>1 &
  129. # 7. 死循环程序的容错机制
  130. #while :
  131. #do
  132. # 查看协议栈进程状态
  133. #paraState $NEWTON $PROGDIR/$1 $# $2 &
  134. #paraState $OPCUA $PROGDIR/$1 $# $2 &
  135. #paraState $MODBUS $PROGDIR/$1 $# $2 &
  136. #paraState $MQTT $PROGDIR/$1 $# $2 &
  137. #done

打赏

                    支付宝                                                         微信

微信与支付宝支付

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注