faet: 新增一个开发环境的热更新脚本
This commit is contained in:
parent
4b817b320c
commit
43ac9a6d10
@ -23,7 +23,7 @@ cleanup() {
|
||||
# 清理所有 PID 文件并杀服务进程
|
||||
for service in gateway activityService galleryService socialService assetService userService; do
|
||||
pkill -9 -f "$service" 2>/dev/null || true
|
||||
rm -f "/tmp/dev_sh_${service}.pid" "/tmp/dev_sh_${service}_restart"
|
||||
rm -f "/tmp/dev_sh_${service}.pid" "/tmp/dev_sh_${service}_restart" "/tmp/dev_sh_${service}.lock"
|
||||
echo -e "${YELLOW} 🛑 $service 已停止${NC}"
|
||||
done
|
||||
|
||||
@ -140,6 +140,13 @@ restart_service() {
|
||||
local port=$4
|
||||
local use_db=$5
|
||||
local pid_file="/tmp/dev_sh_${name}.pid"
|
||||
local lock_file="/tmp/dev_sh_${name}.lock"
|
||||
|
||||
# 加锁防止并发重启
|
||||
if [ -f "$lock_file" ]; then
|
||||
return 0
|
||||
fi
|
||||
touch "$lock_file"
|
||||
|
||||
# Step 1: 编译(先编译,编译成功才杀旧进程)
|
||||
if [ ! -d "$SCRIPT_DIR/$dir" ]; then
|
||||
@ -182,6 +189,9 @@ restart_service() {
|
||||
else
|
||||
echo -e "${RED}❌ [$name] 重启失败,查看日志: tail -f /tmp/${name}.log${NC}"
|
||||
fi
|
||||
|
||||
# 解锁
|
||||
rm -f "$lock_file"
|
||||
}
|
||||
|
||||
# 启动文件监听器
|
||||
@ -205,12 +215,36 @@ start_watcher() {
|
||||
|
||||
(
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
fswatch -r "$watch_path" --exclude='\.git' --exclude='_test\.go$'
|
||||
# 排除: .git目录, 测试文件, 二进制文件(无扩展名), .exe, bin/目录
|
||||
fswatch -r "$watch_path" \
|
||||
--exclude='\.git' \
|
||||
--exclude='_test\.go$' \
|
||||
--exclude='\.exe$' \
|
||||
--exclude='gateway$' \
|
||||
--exclude='userService$' \
|
||||
--exclude='assetService$' \
|
||||
--exclude='socialService$' \
|
||||
--exclude='galleryService$' \
|
||||
--exclude='activityService$'
|
||||
else
|
||||
inotifywait -r -m -e modify,create,write "$watch_path" --exclude='\.git' --exclude='_test\.go$'
|
||||
inotifywait -r -m -e modify,create,write "$watch_path" \
|
||||
--exclude='\.git' \
|
||||
--exclude='_test\.go$' \
|
||||
--exclude='\.exe$' \
|
||||
--exclude='gateway$' \
|
||||
--exclude='userService$' \
|
||||
--exclude='assetService$' \
|
||||
--exclude='socialService$' \
|
||||
--exclude='galleryService$' \
|
||||
--exclude='activityService$'
|
||||
fi | while read event; do
|
||||
# 时间戳防抖:每次事件更新标记文件
|
||||
# Darwin 不支持 date +%s%N,使用 python 获取纳秒时间戳
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
python3 -c 'import time; print(int(time.time()*1e9))' > "$restart_marker"
|
||||
else
|
||||
date +%s%N > "$restart_marker"
|
||||
fi
|
||||
done
|
||||
) &
|
||||
local watcher_pid=$!
|
||||
@ -224,10 +258,15 @@ start_watcher() {
|
||||
if [ ! -f "$restart_marker" ]; then
|
||||
continue
|
||||
fi
|
||||
local now=$(date +%s%N)
|
||||
local now
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
now=$(python3 -c 'import time; print(int(time.time()*1e9))')
|
||||
else
|
||||
now=$(date +%s%N)
|
||||
fi
|
||||
local last_time=$(cat "$restart_marker" 2>/dev/null || echo 0)
|
||||
local elapsed=$((now - last_time))
|
||||
if (( elapsed >= 300000000 )); then
|
||||
if (( elapsed >= 500000000 )); then
|
||||
# 距上次事件已过 300ms,执行重启
|
||||
rm -f "$restart_marker"
|
||||
restart_service "$name" "$dir" "$binary" "$port" "$use_db"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user