Linux下启动C/C++守护进程的bash脚本(工作记录)
本脚本是在工作中,为了方便管理,写的一个用来启动C/C++守护进程的脚本,记录一下
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文件,并给文件添加可执行权限即可使用
1
2
3
4
5
|
chmod a+x adminApp.sh
./adminApp.sh checkconfig #检查设置
./adminApp.sh status #查看状态
./adminApp.sh start #启动所有程序
./adminApp.sh stop #停止所有程序
|