修3
Some checks failed
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-02-27 11:59:53 +08:00
parent 622908cbad
commit c85bf31d99

47
run.sh
View File

@@ -14,12 +14,28 @@ get_port_pids() {
if command -v lsof >/dev/null 2>&1; then if command -v lsof >/dev/null 2>&1; then
lsof -t -i:2333 2>/dev/null lsof -t -i:2333 2>/dev/null
elif command -v ss >/dev/null 2>&1; then elif command -v ss >/dev/null 2>&1; then
ss -ltnp 'sport = :2333' 2>/dev/null | sed -n 's/.*pid=\([0-9]\+\).*//p' | sort -u ss -ltnp 'sport = :2333' 2>/dev/null | sed -n 's/.*pid=\([0-9]\+\).*/\1/p' | sort -u
elif command -v netstat >/dev/null 2>&1; then elif command -v netstat >/dev/null 2>&1; then
netstat -ltnp 2>/dev/null | sed -n 's/.* \([0-9]\+\)\/.*//p' | sort -u netstat -ltnp 2>/dev/null | sed -n 's/.* \([0-9]\+\)\/.*/\1/p' | sort -u
elif command -v fuser >/dev/null 2>&1; then elif command -v fuser >/dev/null 2>&1; then
fuser -n tcp 2333 2>/dev/null | tr ' ' ' fuser -n tcp 2333 2>/dev/null | tr ' ' '\n' | sort -u
' | sort -u fi
}
prepare_standalone() {
if [ -f ".next/standalone/server.js" ]; then
rm -rf .next/standalone/.next .next/standalone/public
mkdir -p .next/standalone/.next
[ -d .next/static ] && cp -r .next/static .next/standalone/.next/
[ -d public ] && cp -r public .next/standalone/
fi
}
start_server() {
if [ -f ".next/standalone/server.js" ]; then
NODE_ENV=production PORT=2333 nohup node .next/standalone/server.js > "$LOG_FILE" 2>&1 &
else
NODE_ENV=production nohup $PM run start > "$LOG_FILE" 2>&1 &
fi fi
} }
@@ -36,14 +52,14 @@ function do_stop() {
rm "$PID_FILE" rm "$PID_FILE"
fi fi
# 2. 强力兜底:查找并杀死占<EFBFBD><EFBFBD>?2333 端口的所<EFBFBD><EFBFBD>?Node 进程 # 2. 强力兜底:查找并杀死占?2333 端口的所?Node 进程
PORT_PIDS=$(get_port_pids) PORT_PIDS=$(get_port_pids)
if [ -n "$PORT_PIDS" ]; then if [ -n "$PORT_PIDS" ]; then
for P in $PORT_PIDS; do for P in $PORT_PIDS; do
kill -9 $P >/dev/null 2>&1 kill -9 $P >/dev/null 2>&1
done done
fi fi
printf "${YELLOW}已停止所有相关进程并释放端口<EFBFBD><EFBFBD>?{NC}\n" printf "${YELLOW}已停止所有相关进程并释放端口?{NC}\n"
} }
function do_start() { function do_start() {
@@ -65,29 +81,30 @@ function do_start() {
fi fi
printf "${GREEN}?? $PM ?? STARK Todo List (production)...${NC}\n" printf "${GREEN}?? $PM ?? STARK Todo List (production)...${NC}\n"
# 抑制安装输出,保持界面整<EFBFBD><EFBFBD>? $PM install > /dev/null 2>&1 # 抑制安装输出,保持界面整? $PM install > /dev/null 2>&1
$PM run build > /dev/null 2>&1 $PM run build > /dev/null 2>&1
prepare_standalone
NODE_ENV=production nohup $PM run start > "$LOG_FILE" 2>&1 & start_server
echo $! > "$PID_FILE" echo $! > "$PID_FILE"
sleep 2 sleep 2
if kill -0 $(cat "$PID_FILE") 2>/dev/null; then if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
printf "${GREEN}启动成功!访<EFBFBD><EFBFBD>? http://localhost:2333${NC}\n" printf "${GREEN}启动成功!访? http://localhost:2333${NC}\n"
else else
printf "${RED}启动失败,请查看 $LOG_FILE${NC}\n" printf "${RED}启动失败,请查看 $LOG_FILE${NC}\n"
rm -f "$PID_FILE" rm -f "$PID_FILE"
fi fi
} }
# --- 初始<EFBFBD><EFBFBD>?--- # --- 初始?---
if [ ! -f "todos.json" ]; then if [ ! -f "todos.json" ]; then
echo "[]" > todos.json echo "[]" > todos.json
printf "${YELLOW}已创建初始数据文<EFBFBD><EFBFBD>?todos.json${NC}\n" printf "${YELLOW}已创建初始数据文?todos.json${NC}\n"
fi fi
# 检查包管理<EFBFBD><EFBFBD>? # 检查包管理?
if command -v pnpm >/dev/null 2>&1; then if command -v pnpm >/dev/null 2>&1; then
PM="pnpm" PM="pnpm"
else else
@@ -109,18 +126,18 @@ case "$1" in
do_start do_start
;; ;;
logs) logs)
[ -f "$LOG_FILE" ] && tail -f "$LOG_FILE" || printf "${RED}日志文件不存<EFBFBD><EFBFBD>?{NC}\n" [ -f "$LOG_FILE" ] && tail -f "$LOG_FILE" || printf "${RED}日志文件不存?{NC}\n"
;; ;;
status) status)
if [ -n "$(get_port_pids)" ]; then if [ -n "$(get_port_pids)" ]; then
printf "${GREEN}应用正在运行${NC}\n" printf "${GREEN}应用正在运行${NC}\n"
(command -v lsof >/dev/null 2>&1 && lsof -i:2333) || (command -v ss >/dev/null 2>&1 && ss -ltnp 'sport = :2333') || (command -v netstat >/dev/null 2>&1 && netstat -ltnp) || true (command -v lsof >/dev/null 2>&1 && lsof -i:2333) || (command -v ss >/dev/null 2>&1 && ss -ltnp 'sport = :2333') || (command -v netstat >/dev/null 2>&1 && netstat -ltnp) || true
else else
printf "${RED}应用未运<EFBFBD><EFBFBD>?{NC}\n" printf "${RED}应用未运?{NC}\n"
fi fi
;; ;;
clean) clean)
printf "${BLUE}清理缓存和日<EFBFBD><EFBFBD>?..${NC}\n" printf "${BLUE}清理缓存和日?..${NC}\n"
rm -rf .next "$LOG_FILE" "$PID_FILE" rm -rf .next "$LOG_FILE" "$PID_FILE"
printf "${GREEN}清理完成${NC}\n" printf "${GREEN}清理完成${NC}\n"
;; ;;