112 lines
2.8 KiB
Bash
112 lines
2.8 KiB
Bash
#!/bin/bash
|
||
|
||
# --- 颜色定义 ---
|
||
GREEN='\033[0;32m'
|
||
BLUE='\033[0;34m'
|
||
YELLOW='\033[1;33m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
PID_FILE="app.pid"
|
||
LOG_FILE="app.log"
|
||
|
||
# --- 逻辑å°<C3A5>装 ---
|
||
|
||
function do_stop() {
|
||
printf "${YELLOW}æ£åœ¨å<EFBFBD>œæ¢ STARK Todo List...${NC}\n"
|
||
|
||
# 1. 首先å°<C3A5>试通过 PID 文件å<C2B6>œæ¢
|
||
if [ -f "$PID_FILE" ]; then
|
||
PID=$(cat "$PID_FILE")
|
||
pkill -P $PID >/dev/null 2>&1
|
||
kill $PID >/dev/null 2>&1
|
||
rm "$PID_FILE"
|
||
fi
|
||
|
||
# 2. 强力兜底:查找并æ<C2B6>€æ»å<C2BB> ç”?2333 端å<C2AF>£çš„æ‰€æœ?Node 进程
|
||
PORT_PIDS=$(lsof -t -i:2333)
|
||
if [ -n "$PORT_PIDS" ]; then
|
||
for P in $PORT_PIDS; do
|
||
kill -9 $P >/dev/null 2>&1
|
||
done
|
||
fi
|
||
printf "${YELLOW}å·²å<EFBFBD>œæ¢æ‰€æœ‰ç›¸å…³è¿›ç¨‹å¹¶é‡Šæ”¾ç«¯å<EFBFBD>£ã€?{NC}\n"
|
||
}
|
||
|
||
function do_start() {
|
||
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
|
||
printf "${YELLOW}应用已ç»<EFBFBD>在è¿<EFBFBD>è¡Œä¸ (PID: $(cat $PID_FILE))${NC}\n"
|
||
return 0
|
||
fi
|
||
|
||
PORT_PID=$(lsof -t -i:2333)
|
||
if [ -n "$PORT_PID" ]; then
|
||
printf "${RED}错误: 端å<C2AF>£ 2333 已被å<C2AB> 用,å°<C3A5>试执è¡?stop å<>Žå†<C3A5>å<EFBFBD>¯åЍ${NC}\n"
|
||
return 1
|
||
fi
|
||
|
||
printf "${GREEN}使用 $PM å<>¯åЍ STARK Todo List...${NC}\n"
|
||
# 抑制安装输出,ä¿<C3A4>æŒ<C3A6>界é<C592>¢æ•´æ´? $PM install > /dev/null 2>&1
|
||
|
||
nohup $PM run dev > "$LOG_FILE" 2>&1 &
|
||
echo $! > "$PID_FILE"
|
||
|
||
sleep 2
|
||
if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
|
||
printf "${GREEN}å<EFBFBD>¯åЍæˆ<EFBFBD>功ï¼<EFBFBD>访é—? http://localhost:2333${NC}\n"
|
||
else
|
||
printf "${RED}å<EFBFBD>¯åŠ¨å¤±è´¥ï¼Œè¯·æŸ¥çœ‹ $LOG_FILE${NC}\n"
|
||
rm -f "$PID_FILE"
|
||
fi
|
||
}
|
||
|
||
# --- åˆ<C3A5>å§‹åŒ?---
|
||
if [ ! -f "todos.json" ]; then
|
||
echo "[]" > todos.json
|
||
printf "${YELLOW}已创建åˆ<EFBFBD>å§‹æ•°æ<EFBFBD>®æ–‡ä»?todos.json${NC}\n"
|
||
fi
|
||
|
||
# 检查包管ç<C2A1>†å™?if command -v pnpm >/dev/null 2>&1; then
|
||
PM="pnpm"
|
||
else
|
||
PM="npm"
|
||
fi
|
||
|
||
case "$1" in
|
||
start)
|
||
do_start
|
||
;;
|
||
stop)
|
||
do_stop
|
||
;;
|
||
restart)
|
||
printf "${BLUE}æ£åœ¨æ‰§è¡Œå½»åº•é‡<EFBFBD>å<EFBFBD>¯...${NC}\n"
|
||
do_stop
|
||
sleep 1
|
||
rm -rf .next
|
||
do_start
|
||
;;
|
||
logs)
|
||
[ -f "$LOG_FILE" ] && tail -f "$LOG_FILE" || printf "${RED}日志文件ä¸<EFBFBD>å˜åœ?{NC}\n"
|
||
;;
|
||
status)
|
||
if lsof -i:2333 >/dev/null 2>&1; then
|
||
printf "${GREEN}应用æ£åœ¨è¿<EFBFBD>行${NC}\n"
|
||
lsof -i:2333
|
||
else
|
||
printf "${RED}应用未è¿<EFBFBD>è¡?{NC}\n"
|
||
fi
|
||
;;
|
||
clean)
|
||
printf "${BLUE}清ç<EFBFBD>†ç¼“å˜å’Œæ—¥å¿?..${NC}\n"
|
||
rm -rf .next "$LOG_FILE" "$PID_FILE"
|
||
printf "${GREEN}清ç<EFBFBD>†å®Œæˆ<EFBFBD>${NC}\n"
|
||
;;
|
||
*)
|
||
printf "${BLUE}STARK Todo List 本地管ç<C2A1>†è„šæœ¬${NC}\n"
|
||
echo "用法: $0 [start|stop|restart|logs|status|clean]"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|