本脚本是在工作中,为了方便管理,写的一个用来启动C/C++守护进程的脚本,记录一下
#!/bin/<span class='wp_keywordlink_affiliate'><a href="http://www.aiezu.com/tag/bash" title="查看 bash 中的全部文章" target="_blank">bash</a></span> <span class='wp_keywordlink'><a href="http://www.aiezu.com/tag/root" title="root" target="_blank">root</a></span>="/storage/huangcheng"; cd "$ROOT"; declare -A <span class='wp_keywordlink_affiliate'><a href="http://www.aiezu.com/tag/daemon" title="查看 daemon 中的全部文章" target="_blank">daemon</a></span>s; #定义一个数组,key为目录,val为服务主程序 daemons=( ["cloudfileserver"]="cloudfileserver" ["blanceserver"]="blanceserver" ["checkserver"]="daemon" ["cwlogin"]="cwlogin" ["dbserver"]="dbserver" ["gateserver"]="gateserver" ["jdserver"]="jdserver" ["WingLettersServer"]="WingLettersServer" ); checkconfig () { #检查函数,用来检查daemons数组中配置的程序文件是否存在 for folder in "${!daemons[@]}"; do file="$folder/${daemons[${folder}]}"; if [ -f "$file" ]; then echo "$file yes."; else echo "$file no."; fi done; } status () { #检查daemons数组中配置的所有程序是否正在运行 if [ -z "$1" ]; then for folder in "${!daemons[@]}"; do daemon="${daemons[${folder}]}"; pid=$(ps aux|grep "\./$daemon"|grep -v grep|awk '{print $2}'); if [ -n "$pid" ]; then echo "$daemon is running, pid: $pid"; else echo "$daemon is not running"; fi done else pid=$(ps aux|grep "\./$1"|grep -v grep|awk '{print $2}'); echo $pid; fi } stop () { #停止daemons数组中配置的所有程序 if [ -z "$1" ]; then for folder in "${!daemons[@]}"; do daemon="${daemons[${folder}]}"; pid=$(status $daemon); if [ -n "$pid" ]; then kill -9 "$pid"; pid=$(status $daemon); if [ -z "$pid" ]; then echo "$folder stop success"; else echo "$folder stop fail"; fi else echo "$folder is not running"; fi done else folder=$1; daemon="${daemons[${folder}]}"; if ! [ -d "$ROOT/$folder" ] || ! [ -f "$ROOT/$folder/$daemon" ]; then echo "error: daemon $folder not exists;"; return; fi pid=$(status $daemon); if [ -z "$pid" ]; then echo "$daemon is not running"; return; fi kill -9 "$pid"; pid=$(status $daemon); if [ -z "$pid" ]; then echo "$daemon stop success"; else echo "$daemon stop fail, pid: $pid"; fi fi } start () { #启动daemons数组中配置的所有程序 if [ -z "$1" ]; then for folder in "${!daemons[@]}"; do daemon="${daemons[${folder}]}"; pid=$(status $daemon); if [ -n "$pid" ]; then echo "$daemon is running, pid: $pid;"; continue; fi cd "$ROOT/$folder"; if [ -f "$daemon" ]; then chmod a+x "$daemon"; nohup "./$daemon" & > /dev/null pid=$(status $daemon); if [ -n "$pid" ]; then echo "$daemon start success, pid: $pid;"; else echo "$daemon start fail;"; fi else echo "error: daemon $daemon not exists;"; fi done; else folder=$1; daemon="${daemons[${folder}]}"; if ! [ -d "$ROOT/$1" ] || ! [ -f "$ROOT/$folder/$daemon" ]; then echo "error: daemon $folder not exists;"; return; fi pid=$(status $daemon); if [ -n "$pid" ]; then echo "$daemon is running, pid: $pid;"; return; fi cd "$ROOT/$folder"; chmod a+x "$daemon"; nohup "./$daemon" & > /dev/null pid=$(status $daemon); if [ -n "$pid" ]; then echo "$daemon start success, pid: $pid;"; else echo "$daemon start fail;"; fi fi } #程序主入口 if [ -n "$1" ]; then case "$1" in "checkconfig" ) checkconfig;; "status" ) status "$2";; "start" ) start "$2";; "stop" ) stop "$2";; "restart" ) stop "$2"; start "$2";; "cleanlog" ) stop; rm -rf `find $ROOT -name *.log` rm -rf `find $ROOT -name *.out` start;; esac fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
#!/bin/bash
ROOT="/storage/huangcheng";
cd "$ROOT";
declare -A daemons; #定义一个数组,key为目录,val为服务主程序
daemons=(
["cloudfileserver"]="cloudfileserver"
["blanceserver"]="blanceserver"
["checkserver"]="daemon"
["cwlogin"]="cwlogin"
["dbserver"]="dbserver"
["gateserver"]="gateserver"
["jdserver"]="jdserver"
["WingLettersServer"]="WingLettersServer"
);
checkconfig () { #检查函数,用来检查daemons数组中配置的程序文件是否存在
for folder in "${!daemons[@]}";
do
file="$folder/${daemons[${folder}]}";
if [ -f "$file" ]; then
echo "$file yes.";
else
echo "$file no.";
fi
done;
}
status () { #检查daemons数组中配置的所有程序是否正在运行
if [ -z "$1" ]; then
for folder in "${!daemons[@]}";
do
daemon="${daemons[${folder}]}";
pid=$(ps aux|grep "\./$daemon"|grep -v grep|awk '{print $2}');
if [ -n "$pid" ]; then
echo "$daemon is running, pid: $pid";
else
echo "$daemon is not running";
fi
done
else
pid=$(ps aux|grep "\./$1"|grep -v grep|awk '{print $2}');
echo $pid;
fi
}
stop () { #停止daemons数组中配置的所有程序
if [ -z "$1" ]; then
for folder in "${!daemons[@]}";
do
daemon="${daemons[${folder}]}";
pid=$(status $daemon);
if [ -n "$pid" ]; then
kill -9 "$pid";
pid=$(status $daemon);
if [ -z "$pid" ]; then
echo "$folder stop success";
else
echo "$folder stop fail";
fi
else
echo "$folder is not running";
fi
done
else
folder=$1;
daemon="${daemons[${folder}]}";
if ! [ -d "$ROOT/$folder" ] || ! [ -f "$ROOT/$folder/$daemon" ]; then
echo "error: daemon $folder not exists;";
return;
fi
pid=$(status $daemon);
if [ -z "$pid" ]; then
echo "$daemon is not running";
return;
fi
kill -9 "$pid";
pid=$(status $daemon);
if [ -z "$pid" ]; then
echo "$daemon stop success";
else
echo "$daemon stop fail, pid: $pid";
fi
fi
}
start () { #启动daemons数组中配置的所有程序
if [ -z "$1" ]; then
for folder in "${!daemons[@]}";
do
daemon="${daemons[${folder}]}";
pid=$(status $daemon);
if [ -n "$pid" ]; then
echo "$daemon is running, pid: $pid;";
continue;
fi
cd "$ROOT/$folder";
if [ -f "$daemon" ]; then
chmod a+x "$daemon";
nohup "./$daemon" & > /dev/null
pid=$(status $daemon);
if [ -n "$pid" ]; then
echo "$daemon start success, pid: $pid;";
else
echo "$daemon start fail;";
fi
else
echo "error: daemon $daemon not exists;";
fi
done;
else
folder=$1;
daemon="${daemons[${folder}]}";
if ! [ -d "$ROOT/$1" ] || ! [ -f "$ROOT/$folder/$daemon" ]; then
echo "error: daemon $folder not exists;";
return;
fi
pid=$(status $daemon);
if [ -n "$pid" ]; then
echo "$daemon is running, pid: $pid;";
return;
fi
cd "$ROOT/$folder";
chmod a+x "$daemon";
nohup "./$daemon" & > /dev/null
pid=$(status $daemon);
if [ -n "$pid" ]; then
echo "$daemon start success, pid: $pid;";
else
echo "$daemon start fail;";
fi
fi
}
#程序主入口
if [ -n "$1" ]; then
case "$1" in
"checkconfig" )
checkconfig;;
"status" )
status "$2";;
"start" )
start "$2";;
"stop" )
stop "$2";;
"restart" )
stop "$2";
start "$2";;
"cleanlog" )
stop;
rm -rf `find $ROOT -name *.log`
rm -rf `find $ROOT -name *.out`
start;;
esac
fi
|
将代码保存为appadmin.sh文件,并给文件添加可执行权限即可使用
chmod a+x adminApp.sh ./adminApp.sh checkconfig #检查设置 ./adminApp.sh status #查看状态 ./adminApp.sh start #启动所有程序 ./adminApp.sh stop #停止所有程序
1
2
3
4
5
|
chmod a+x adminApp.sh
./adminApp.sh checkconfig #检查设置
./adminApp.sh status #查看状态
./adminApp.sh start #启动所有程序
./adminApp.sh stop #停止所有程序
|