faet: 新增一个开发环境的热更新脚本
This commit is contained in:
parent
4b817b320c
commit
43ac9a6d10
@ -23,7 +23,7 @@ cleanup() {
|
|||||||
# 清理所有 PID 文件并杀服务进程
|
# 清理所有 PID 文件并杀服务进程
|
||||||
for service in gateway activityService galleryService socialService assetService userService; do
|
for service in gateway activityService galleryService socialService assetService userService; do
|
||||||
pkill -9 -f "$service" 2>/dev/null || true
|
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}"
|
echo -e "${YELLOW} 🛑 $service 已停止${NC}"
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -140,6 +140,13 @@ restart_service() {
|
|||||||
local port=$4
|
local port=$4
|
||||||
local use_db=$5
|
local use_db=$5
|
||||||
local pid_file="/tmp/dev_sh_${name}.pid"
|
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: 编译(先编译,编译成功才杀旧进程)
|
# Step 1: 编译(先编译,编译成功才杀旧进程)
|
||||||
if [ ! -d "$SCRIPT_DIR/$dir" ]; then
|
if [ ! -d "$SCRIPT_DIR/$dir" ]; then
|
||||||
@ -182,6 +189,9 @@ restart_service() {
|
|||||||
else
|
else
|
||||||
echo -e "${RED}❌ [$name] 重启失败,查看日志: tail -f /tmp/${name}.log${NC}"
|
echo -e "${RED}❌ [$name] 重启失败,查看日志: tail -f /tmp/${name}.log${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 解锁
|
||||||
|
rm -f "$lock_file"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 启动文件监听器
|
# 启动文件监听器
|
||||||
@ -205,12 +215,36 @@ start_watcher() {
|
|||||||
|
|
||||||
(
|
(
|
||||||
if [[ "$(uname)" == "Darwin" ]]; then
|
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
|
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
|
fi | while read event; do
|
||||||
# 时间戳防抖:每次事件更新标记文件
|
# 时间戳防抖:每次事件更新标记文件
|
||||||
date +%s%N > "$restart_marker"
|
# 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
|
done
|
||||||
) &
|
) &
|
||||||
local watcher_pid=$!
|
local watcher_pid=$!
|
||||||
@ -224,10 +258,15 @@ start_watcher() {
|
|||||||
if [ ! -f "$restart_marker" ]; then
|
if [ ! -f "$restart_marker" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
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 last_time=$(cat "$restart_marker" 2>/dev/null || echo 0)
|
||||||
local elapsed=$((now - last_time))
|
local elapsed=$((now - last_time))
|
||||||
if (( elapsed >= 300000000 )); then
|
if (( elapsed >= 500000000 )); then
|
||||||
# 距上次事件已过 300ms,执行重启
|
# 距上次事件已过 300ms,执行重启
|
||||||
rm -f "$restart_marker"
|
rm -f "$restart_marker"
|
||||||
restart_service "$name" "$dir" "$binary" "$port" "$use_db"
|
restart_service "$name" "$dir" "$binary" "$port" "$use_db"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user