From 544a2c026d81f1a59c873a24324b9f3628e50126 Mon Sep 17 00:00:00 2001 From: lccsw <805383944@qq.com> Date: Sat, 6 Dec 2025 09:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0websocket=20shell=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- websocket.sh | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 websocket.sh diff --git a/websocket.sh b/websocket.sh new file mode 100644 index 00000000..f55a95c6 --- /dev/null +++ b/websocket.sh @@ -0,0 +1,191 @@ +#!/bin/bash + +# WebSocket 服务管理脚本 +# 路径配置 +SCRIPT_PATH="/home/wwwroot/spacestation/www/api/websocket.php" +PID_FILE="/var/run/websocket.pid" +LOG_FILE="/tmp/websocket.log" + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# 检查PHP和Swoole扩展 +check_environment() { + if ! command -v php &> /dev/null; then + echo -e "${RED}错误: 未找到PHP${NC}" + exit 1 + fi + + if ! php -m | grep -q "swoole"; then + echo -e "${RED}错误: PHP未安装Swoole扩展${NC}" + exit 1 + fi +} + +# 获取进程ID +get_pid() { + if [ -f "$PID_FILE" ]; then + cat "$PID_FILE" + fi +} + +# 检查服务是否运行 +is_running() { + local pid=$(get_pid) + if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then + return 0 + else + return 1 + fi +} + +# 启动服务 +start() { + check_environment + + if is_running; then + echo -e "${YELLOW}警告: WebSocket服务已在运行 (PID: $(get_pid))${NC}" + return 1 + fi + + echo -n "正在启动WebSocket服务... " + + # 后台启动服务 + nohup php "$SCRIPT_PATH" > "$LOG_FILE" 2>&1 & + local pid=$! + + # 等待服务启动 + sleep 2 + + if kill -0 $pid 2>/dev/null; then + echo "$pid" > "$PID_FILE" + echo -e "${GREEN}成功${NC} (PID: $pid)" + else + echo -e "${RED}失败${NC}" + return 1 + fi +} + +# 停止服务 +stop() { + if ! is_running; then + echo -e "${YELLOW}WebSocket服务未运行${NC}" + return 1 + fi + + local pid=$(get_pid) + echo -n "正在停止WebSocket服务 (PID: $pid)... " + + # 优雅地停止服务 + if kill -TERM "$pid" 2>/dev/null; then + # 等待进程结束 + local count=0 + while kill -0 "$pid" 2>/dev/null && [ $count -lt 10 ]; do + sleep 1 + ((count++)) + done + + # 如果进程仍未结束,则强制杀死 + if kill -0 "$pid" 2>/dev/null; then + kill -KILL "$pid" + sleep 1 + fi + + rm -f "$PID_FILE" + echo -e "${GREEN}成功${NC}" + else + echo -e "${RED}失败${NC}" + return 1 + fi +} + +# 重启服务 +restart() { + stop + sleep 2 + start +} + +# 查看服务状态 +status() { + if is_running; then + local pid=$(get_pid) + echo -e "${GREEN}WebSocket服务正在运行 (PID: $pid)${NC}" + + # 显示更多详细信息 + ps -p "$pid" -o pid,ppid,cmd,etime --no-headers 2>/dev/null + else + echo -e "${YELLOW}WebSocket服务未运行${NC}" + return 1 + fi +} + +# 查看日志 +logs() { + if [ -f "$LOG_FILE" ]; then + tail -f "$LOG_FILE" + else + echo -e "${YELLOW}日志文件不存在: $LOG_FILE${NC}" + return 1 + fi +} + +# 查看最后的日志 +tail_logs() { + local lines=${1:-20} + if [ -f "$LOG_FILE" ]; then + tail -n "$lines" "$LOG_FILE" + else + echo -e "${YELLOW}日志文件不存在: $LOG_FILE${NC}" + return 1 + fi +} + +# 显示帮助信息 +show_help() { + echo "用法: $0 {start|stop|restart|status|logs|tail|help}" + echo "" + echo "命令说明:" + echo " start 启动WebSocket服务" + echo " stop 停止WebSocket服务" + echo " restart 重启WebSocket服务" + echo " status 查看服务状态" + echo " logs 实时查看日志" + echo " tail [n] 查看最后n行日志 (默认20行)" + echo " help 显示此帮助信息" +} + +# 主逻辑 +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + status) + status + ;; + logs) + logs + ;; + tail) + tail_logs "$2" + ;; + help|--help|-h) + show_help + ;; + *) + echo -e "${RED}无效参数: $1${NC}" + show_help + exit 1 + ;; +esac + +exit $?