linux 程序启动与停止管理脚本

公司接了一个第三方的系统,基于linux写的几个程序,一共有9个部件,第三方没有给脚本,每次启动或停止都得一个一个手工去停止或修改.......,这里稍微鄙视下。

没办法,求人还不如自己动手写,

需求简单:就是将这9个部件同时管理,可以启动与停止,可以查看当前是否运行。

脚本如下

#!/bin/bash
. /etc/init.d/functions

devsNum=`ps -eo comm,pid|awk '/sdk_devs/'|wc -l`
gatewayNum=`ps -eo comm,pid|awk '/sdk_gateway/'|wc -l`
live_serverNum=`ps -eo comm,pid|awk '/sdk_live/'|wc -l`
nvr_Num=`ps -eo comm,pid|awk '/sdk_nvr/'|wc -l`
oss_Num=`ps -eo comm,pid|awk '/sdk_oss/'|wc -l`
portalNum=`ps -eo comm,pid|awk '/portal_ds6/'|wc -l`
rec_serverNum=`ps -eo comm,pid|awk '/sdk_rec/'|wc -l`
xhome_ssNum=`ps -eo comm,pid|awk '/xhome_ss/'|wc -l`

#echo $devsNum $gatewayNum $live_serverNum $nvr_Num $oss_Num $portalNum $rec_serverNum $xhome_ssNu



status()
{
   output='printf "%-11s is Running and PID is %6s
"'
   [ $devsNum  -eq 1 ] && printf "%-11s is Running and PID is %6s
"  "dev" "`ps -eo comm,pid|awk '/sdk_devs/{print $2}'`" || echo "dev is not Run"
   [ $gatewayNum -eq 1 ] && printf "%-11s is Running and PID is %6s
" "gateway" "`ps -eo comm,pid|awk '/sdk_gateway/{print $2}'`" || echo "gateway is not Run"
   [ $live_serverNum -eq 1 ] && printf "%-11s is Running and PID is %6s
" "live_server" "`ps -eo comm,pid|awk '/sdk_live/{print $2}'`" || echo "live_server is not Run"
   [ $nvr_Num -eq 1  ] && printf "%-11s is Running and PID is %6s
" "nvr" "`ps -eo comm,pid|awk '/sdk_nvr/{print $2}'`" || echo "Nvr is not Run"
   [ $oss_Num -eq 1  ] && printf "%-11s is Running and PID is %6s
" "oss" "`ps -eo comm,pid|awk '/sdk_oss/{print $2}'`" || echo "oss is not Run"
   [ $portalNum -eq 1  ] && printf "%-11s is Running and PID is %6s
" "portal"  "`ps -eo comm,pid|awk '/portal_ds6$?/{print $2}'`" || echo "portal is not Run"
   [ $rec_serverNum -eq 1  ] && printf "%-11s is Running and PID is %6s
" "rec_server"  "`ps -eo comm,pid|awk '/sdk_rec/{print $2}'`" || echo "rec_server is not Run"
   [ $xhome_ssNum -eq 1  ] && printf "%-11s is Running and PID is %6s
" "ss"  "`ps -eo comm,pid|awk '/xhome_ss/{print $2}'`" || echo "ss is not Run"
   [ `ps -e|awk '/report/'|wc -l` -eq 2 ] && printf "%-11s is Running and PID is %6s
" "report" "`ps -e|awk '/report/{printf("%s ",$1)}'`" || echo "report is not Run"
}

start()
{
  #start devs
   if [ $devsNum -eq 1  ];then
     echo "dev Server is already Running"
   else
     cd devs
      chmod +x sdk_devs_351 
     ./sdk_devs_351  --Ice.Config=xhome_webdev.conf  -s -d  >& /dev/null &
   [ $? -eq 0  ] && action "Starting dev Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi

 #start gateway
  if [ $gatewayNum -eq 1  ];then
    echo "gateway Server is already Running"
  else
    cd gateway
    chmod +x sdk_gateway_ice351
    ./sdk_gateway_ice351 -s -d -alarmvideo >& /dev/null &
    [ $? -eq 0 ] && action "Starting gateway Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi


 #Start live_server
  if [ $live_serverNum -eq 1  ];then
    echo "live_Server is already Running "
  else
    cd  live_server
    chmod +x sdk_live_server_ice351
    ./sdk_live_server_ice351 -s -d  >& /dev/null &
    [ $? -eq 0 ] && action "Starting live_server Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi
    
 
 #Start nvr Server
 if [ $nvr_Num -eq 1 ];then
    echo "nvr_Server is already Running "
  else
    cd nvr
    chmod +x sdk_nvr_write 
    ./sdk_nvr_write -s -d >& /dev/null &
    [ $? -eq 0 ] && action "Starting nvr_server Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi

 #start oss server
  if [ $oss_Num -eq 1  ];then
    echo "oss_Server is already Running "
  else
    cd oss_server/
     chmod +x sdk_oss_server_ice351
    ./sdk_oss_server_ice351  --Ice.Config=oss_server.conf  -s -d  >& /dev/null &
    [ $? -eq 0 ] && action "Starting oss_server Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi

 #start portal
   if [ $portalNum -eq 1  ];then
    echo "portal_Server is already Running "
  else
    cd portal/
    chmod +x portal_ds60_ice351
    ./portal_ds60_ice351  -s -d&  -s -d  >& /dev/null &
    [ $? -eq 0 ] && action "Starting portal Sucessfull" /bin/true || action "Starting Failed" /bin/false
    cd ..
  fi

 #start rec_server
    if [ $rec_serverNum -eq 1  ];then
    echo "rec_Server is already Running "
  else
    cd rec_server/
    chmod +x sdk_rec_server_ice351
    ./sdk_rec_server_ice351  any 1088 112.74.75.20 123  >& /dev/null &
    [ $? -eq 0 ] && action "Starting rec_server Sucessfull" /bin/true || action "Starting Failed" /bin/false
   cd ..
  fi

 #start ss_server
    if [ $xhome_ssNum -eq 1  ];then
    echo "ss_server is already Running "
  else
    cd ss
    chmod +x xhome_ss
     ./xhome_ss -s -d >& /dev/null &
    [ $? -eq 0 ] && action "Starting ss_server Sucessfull" /bin/true || action "Starting Failed" /bin/false
   cd ..
  fi

#start report
 ./report
 
}

stop()
{
  #stop dev
  killall -9 sdk_devs_351 >& /dev/null
  [ $? -eq 0 ] && action "stop dev" /bin/true || action "stop dev" /bin/false
  
  #stop gateway
  killall -9 sdk_gateway_ice351 &> /dev/null
  [ $? -eq 0 ] && action "stop gateway" /bin/true || action "stop gateway" /bin/false

  #stop live_server
  killall -9 sdk_live_server_ice351 &> /dev/null
  [ $? -eq 0 ] && action "stop live_server" /bin/true || action "stop live_server" /bin/false

  #stop nvr
  killall sdk_nvr_write &> /dev/null
   [ $? -eq 0 ] && action "stop nvr" /bin/true || action "stop nvr" /bin/false
  #stop oss
  killall -9 sdk_oss_server_ice351 >& /dev/null 
  [ $? -eq 0 ] && action "stop oss" /bin/true || action "stop oss" /bin/false
  #stop portal
  killall portal_ds6$?_ice351 >& /dev/null
  [ $? -eq 0 ] && action "stop portal" /bin/true || action "stop portal" /bin/false
  #stop rec_server
  killall -9 sdk_rec_server_ice351 &> /dev/null
  [ $? -eq 0 ] && action "stop rec_server" /bin/true || action "stop rec_server" /bin/false
  #stop ss
  killall -9 xhome_ss &> /dev/null
  [ $? -eq 0 ] && action "stop ss" /bin/true || action "stop ss" /bin/false
  #stop report
   killall -9 node_report &> /dev/null
   [ $? -eq 0 ] && action "stop report" /bin/true || action "stop ss" /bin/false
  

}

 

case $1 in 
 start)
      start
      ;;
 stop)
      stop
      ;;
 status)
     status
     ;;
 *)
   echo "Usage $0 {start|stop|status}"
   exit 0
esac

运行如下:

[root@iZ94nv1rj5tZ xhome]# ./dianShiServer.sh status
dev         is Running and PID is  12872
gateway is not Run
live_server is Running and PID is  12878
nvr         is Running and PID is  12881
oss         is Running and PID is  12884
portal      is Running and PID is  10802
rec_server  is Running and PID is  12891
ss          is Running and PID is  12894
report      is Running and PID is 16284 16285 
[root@iZ94nv1rj5tZ xhome]# ./dianShiServer.sh start
dev Server is already Running
Starting gateway Sucessfull [  OK  ]
live_Server is already Running 
nvr_Server is already Running 
oss_Server is already Running 
portal_Server is already Running 
rec_Server is already Running 
ss_server is already Running 
node_report: no process killed
start report sucessfull

在实际使用时,发现不能单独对一个部件进行操作,

只要在case中嵌套if判断,就可实现。这里就不写更新了

原文地址:https://www.cnblogs.com/landhu/p/5206362.html