240 lines
5.3 KiB
Bash
240 lines
5.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
action=$1
|
||
|
|
panel_path="/www/server/panel" # 面板路径
|
||
|
|
webserver_bin="$panel_path/webserver/sbin/webserver" # nginx二进制文件
|
||
|
|
webserver_conf="$panel_path/webserver/conf/webserver.conf" # nginx配置文件
|
||
|
|
webserver_pid="$panel_path/webserver/logs/webserver.pid" # nginx pid文件
|
||
|
|
|
||
|
|
|
||
|
|
PID=0
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
get_pid() {
|
||
|
|
if [ ! -f "$webserver_pid" ]; then
|
||
|
|
PID=0
|
||
|
|
else
|
||
|
|
PID=$(cat $webserver_pid)
|
||
|
|
if [ "$PID" == "" ]; then
|
||
|
|
PID=0
|
||
|
|
else
|
||
|
|
PID=$(ps aux | grep "$PID" | grep -v grep | awk '{print $2}')
|
||
|
|
PID_11=$(ps aux | grep "$webserver_bin" | grep -v grep | awk '{print $2}')
|
||
|
|
if [ "$PID" != "$PID_11" ]; then
|
||
|
|
PID=0
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
PID=$(ps aux | grep "$webserver_bin" | grep -v grep | awk '{print $2}')
|
||
|
|
if [ -z "$PID" ]; then
|
||
|
|
PID=0
|
||
|
|
else
|
||
|
|
PID="$PID"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$PID" ]; then
|
||
|
|
PID=0
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
validate_server_files() {
|
||
|
|
if [ ! -f "$webserver_conf" ]; then
|
||
|
|
echo "YakPanel web server configuration not found: $webserver_conf"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -f "$webserver_bin" ]; then
|
||
|
|
echo "YakPanel web server binary not found: $webserver_bin"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
start() {
|
||
|
|
validate_server_files
|
||
|
|
get_pid
|
||
|
|
|
||
|
|
if [ $PID -gt 0 ]; then
|
||
|
|
echo "YakPanel web server is already running with PID ($PID)"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Starting YakPanel web server..."
|
||
|
|
if [ -f "$webserver_pid" ]; then
|
||
|
|
rm -f $webserver_pid
|
||
|
|
fi
|
||
|
|
chmod 700 $webserver_bin
|
||
|
|
$webserver_bin -c $webserver_conf
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "Failed to start YakPanel web server"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Started"
|
||
|
|
}
|
||
|
|
|
||
|
|
stop() {
|
||
|
|
validate_server_files
|
||
|
|
get_pid
|
||
|
|
if [ $PID -eq 0 ]; then
|
||
|
|
echo "YakPanel web server is not running"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Stopping YakPanel web server..."
|
||
|
|
$webserver_bin -c $webserver_conf -s stop
|
||
|
|
|
||
|
|
pids=$(lsof -c webserver|grep LISTEN|awk '{print $2}'|sort -u)
|
||
|
|
for pid in $pids; do
|
||
|
|
kill -9 $pid
|
||
|
|
done
|
||
|
|
|
||
|
|
pids=$(ps aux | grep "$webserver_bin" | grep -v grep | awk '{print $2}')
|
||
|
|
for pid in $pids; do
|
||
|
|
kill -9 $pid
|
||
|
|
child_process=1
|
||
|
|
done
|
||
|
|
if [ "$child_process" = 1 ]; then
|
||
|
|
if [ -f /www/server/panel/data/port.pl ]; then
|
||
|
|
kill -9 $(lsof -t -i:$(cat /www/server/panel/data/port.pl) -sTCP:LISTEN)
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Stopped"
|
||
|
|
}
|
||
|
|
|
||
|
|
restart() {
|
||
|
|
validate_server_files
|
||
|
|
get_pid
|
||
|
|
echo -n "Restarting YakPanel web server..."
|
||
|
|
if [ $PID -eq 0 ]; then
|
||
|
|
$webserver_bin -c $webserver_conf
|
||
|
|
else
|
||
|
|
$webserver_bin -c $webserver_conf -s reopen
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "Failed to restart YakPanel web server"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Restarted"
|
||
|
|
}
|
||
|
|
|
||
|
|
status() {
|
||
|
|
validate_server_files
|
||
|
|
get_pid
|
||
|
|
if [ $PID -eq 0 ]; then
|
||
|
|
echo "YakPanel web server is not running"
|
||
|
|
else
|
||
|
|
cmdline=/proc/$PID/cmdline
|
||
|
|
if [ ! -f $cmdline ]; then
|
||
|
|
echo "YakPanel web server is not running"
|
||
|
|
rm -f $webserver_pid
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "YakPanel web server is running with PID ($PID)"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
reload() {
|
||
|
|
validate_server_files
|
||
|
|
get_pid
|
||
|
|
if [ $PID -eq 0 ]; then
|
||
|
|
echo "YakPanel web server is not running"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Reloading YakPanel web server..."
|
||
|
|
$webserver_bin -c $webserver_conf -s reload
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "Failed to reload YakPanel web server"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo " Reloaded"
|
||
|
|
}
|
||
|
|
|
||
|
|
configtest() {
|
||
|
|
validate_server_files
|
||
|
|
# 检查配置文件正确性,检查程序自动输出检查结果
|
||
|
|
$webserver_bin -c $webserver_conf -t
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
download() {
|
||
|
|
tip_file=$panel_path/data/download.pl
|
||
|
|
if [ -f $tip_file ]; then
|
||
|
|
echo "YakPanel web server binary has been downloaded"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 标记已下载
|
||
|
|
echo "1" > $tip_file
|
||
|
|
|
||
|
|
# 获取machine
|
||
|
|
machine=$(uname -m)
|
||
|
|
zip_file=$panel_path/data/webserver-$machine.zip
|
||
|
|
wget -O $zip_file https://node.yakpanel.com/webserver/webserver-$machine.zip
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "Failed to download YakPanel web server binary"
|
||
|
|
rm -f $zip_file
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 验证文件hash
|
||
|
|
hash256=$(sha256sum $zip_file | awk '{print $1}')
|
||
|
|
cloud_hash256=$(wget -q -O - https://node.yakpanel.com/webserver/webserver-$machine.txt)
|
||
|
|
if [ "$hash256" != "$cloud_hash256" ]; then
|
||
|
|
echo "Failed to verify YakPanel web server binary"
|
||
|
|
rm -f $zip_file
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 解压文件
|
||
|
|
unzip -o $zip_file -d $panel_path/
|
||
|
|
if [ ! -f $webserver_bin ]; then
|
||
|
|
echo "Failed to extract YakPanel web server binary"
|
||
|
|
rm -f $zip_file
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 删除临时文件
|
||
|
|
rm -f $zip_file
|
||
|
|
# 设置权限
|
||
|
|
chmod 700 $webserver_bin
|
||
|
|
echo "YakPanel web server binary has been downloaded"
|
||
|
|
bash /www/server/panel/init.sh reload
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
case "$action" in
|
||
|
|
start)
|
||
|
|
start
|
||
|
|
;;
|
||
|
|
stop)
|
||
|
|
stop
|
||
|
|
;;
|
||
|
|
restart)
|
||
|
|
restart
|
||
|
|
;;
|
||
|
|
status)
|
||
|
|
status
|
||
|
|
;;
|
||
|
|
reload)
|
||
|
|
reload
|
||
|
|
;;
|
||
|
|
configtest)
|
||
|
|
configtest
|
||
|
|
;;
|
||
|
|
test)
|
||
|
|
configtest
|
||
|
|
;;
|
||
|
|
download)
|
||
|
|
download
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "Usage: $0 {start|stop|restart|status|reload|configtest|test|download}"
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|