bash 启动/关闭程序

  1 #!/bin/bash
  2 #防止程序未启动完成 预留时间
  3 sleep 0
  4 
  5 #定义入参
  6 
  7 ip=$(who -m|awk '{print $5}')
  8 user=$(who -m|awk '{print $1}')
  9 #定义日期
 10 date=`date  "+%Y%m%d"`
 11 
 12 #定义日志函数
 13 function LOG() {
 14   echo $user $ip [`date "+%Y-%m-%d %H:%M:%S"`] '=>' $* | tee -a ./Maintain.$date
 15 }
 16 
 17 
 18 
 19 #定义端口参数转换函数
 20 function exchange_port(){
 21 
 22     #目标字符串转为端口号
 23     case $1 in
 24         'svn') port=23690
 25         ;;
 26         'ruby') port=29636
 27         ;;
 28         *) port=1
 29         
 30         ;;
 31     esac
 32     #返回端口号
 33     echo $port
 34 }
 35 
 36 #定义检查程序是否正常启动
 37 function check_status(){
 38     #根据端口查询,通过返回是否有字符串进行判断
 39     port=$(exchange_port $1)
 40     flag=$(netstat -tunpl|grep $port|awk '{print $1}')
 41     #休眠3s
 42     sleep 3
 43     #字符串不为空
 44     if [[ ${#flag} != 0 ]] && [[ "${port}" != "1" ]];
 45     then
 46         #status=true
 47         LOG $1 "正在运行"
 48     #字符串为空
 49     else [[ "${port}" != "1" ]];
 50         #status=false    
 51         LOG  $1 "未运行"
 52     fi
 53     #echo $status
 54 }
 55 
 56 #定义启动命令参数转换函数
 57 function start_program(){
 58 
 59     case $1 in
 60         #判断
 61         'svn') 
 62         #执行命令
 63         svnserve -d -r /opt/svn --listen-port 23690
 64         ;;
 65         #判断
 66         'ruby')
 67         #切换执行路径 
 68         cd /opt/redmine
 69         #后台运行
 70         nohup bundle exec rails server webrick -e production -p 29636 >> /opt/logs/redmine/log.$date 2>&1 &
 71 
 72         ;;
 73         *) cmd[0]='echo Null'
 74     esac      
 75      
 76     check_status $1
 77 
 78 }
 79 
 80 
 81 #定义关闭程序函数
 82 function stop_program() {
 83   
 84   port=$(exchange_port $1)
 85   #获取程序运行pid
 86   pid=$(ps -ef|grep $1|grep $port|awk '{print $2}')
 87   if [[ "$pid" != "" ]]
 88   then
 89       kill -9 $pid
 90       LOG $target_str "已关闭"
 91   else
 92       LOG $target_str "未启动"
 93   fi
 94 }
 95 
 96 
 97 
 98 function main(){
 99     #主控制程序
100     port=$(exchange_port $1)
101 
102     if [[ "${port}" = "1" ]];
103     then
104         LOG "未知程序"
105     else
106         case $2 in
107             start) start_program $1
108             ;;
109             stop) stop_program $1
110             ;;
111             status) check_status $1
112             ;;
113             *) LOG "命令错误!请使用:start stop status"
114         esac
115     fi
116 }
117 
118 main $1 $2

 

posted @ 2021-01-29 18:01  aongao  阅读(458)  评论(0编辑  收藏  举报