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