From 717b28eeeb3e7367952148a5ad60897fe984b2b0 Mon Sep 17 00:00:00 2001 From: Christins Date: Thu, 15 Oct 2026 23:20:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?release:=20=E6=8E=A5=E5=85=A5=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=A1=86=E6=9E=B6=20rc1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies.json | 2 +- scripts/deploy.sh | 2 +- src/blog_module.cc | 5 ----- src/blog_module.h | 8 -------- 4 files changed, 2 insertions(+), 15 deletions(-) diff --git a/dependencies.json b/dependencies.json index 53a71c4..f435437 100644 --- a/dependencies.json +++ b/dependencies.json @@ -1,7 +1,7 @@ { "chen-sdk": { "repo": "Chen-Christins/chen", - "version": "1.5.5", + "version": "1.5.6-rc3", "arch": "auto" }, "thirdparty": { diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 75405c8..0ba4e89 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -194,7 +194,7 @@ case "$MODE" in [ -d "$tmp/module" ] || die "产物内没有 module/ 目录" log "热更新模块: $tmp/module/*.so -> $DEPLOY_PATH/module/" mkdir -p "$DEPLOY_PATH/module" - cp -a "$tmp"/module/*.so "$DEPLOY_PATH/module/" + mv "$tmp"/module/*.so "$DEPLOY_PATH/module/" # 优先向真实 worker 发 SIGHUP(等价于 server -s reload,但不依赖 pid 文件/work_path) worker="$(server_worker_pid || true)" diff --git a/src/blog_module.cc b/src/blog_module.cc index 9f97f41..61934e6 100644 --- a/src/blog_module.cc +++ b/src/blog_module.cc @@ -64,11 +64,6 @@ bool BlogModule::onUnload() { return true; } -bool BlogModule::onActivate() { - INFO(logger) << "onActivate"; - return true; -} - bool BlogModule::onDeactivate() { INFO(logger) << "onDeactivate"; diff --git a/src/blog_module.h b/src/blog_module.h index dfaabb3..e9366ab 100644 --- a/src/blog_module.h +++ b/src/blog_module.h @@ -54,14 +54,6 @@ class BlogModule : public chen::Module { */ bool onServerUp() override; - /** - * @brief 模块激活:新模块接管流量时调用(热重载) - * @details 在所有 server 的 dispatch 切换后调用。模块应在此方法中 - * 注册新的 servlet/handler。默认实现调用 onServerReady()。 - * @return bool - */ - bool onActivate() override; - /** * @brief 模块停用:旧模块被替换时调用(热重载) * @details 新模块已接管,旧模块停止接收新请求。 From 6e6a5cb49821efab3696a7c371e7e1147c4545cf Mon Sep 17 00:00:00 2001 From: Christins Date: Thu, 15 Oct 2026 23:38:48 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Ddploy=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/deploy.sh | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 0ba4e89..0a39130 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -7,7 +7,7 @@ # ./deploy.sh --mode cold|hot|stop --artifact /tmp/techhaven-server-v1.2.3-amd64.tar.gz # # cold : 停服 → 清空运行目录 → 解压产物 → 用 CONFIG_DIR 覆盖 conf/ → ./server -d 启动 -# hot : 同步 CONFIG_DIR → conf/ → 拷贝 module/*.so → 向 worker 发 SIGHUP → 存活检测 +# hot : 同步 CONFIG_DIR → conf/ → 拷贝 module/*.so → 向 master 发 SIGHUP → 存活检测 # stop : 仅执行 ./server -s stop # set -euo pipefail @@ -70,14 +70,16 @@ server_pids() { server_running() { [ -n "$(server_pids)" ]; } -# 真正处理 SIGHUP 的 worker:其父进程也是本部署的 server 进程 -# (supervisor 未注册信号处理器,向其发 SIGHUP 会因默认动作而退出) -server_worker_pid() { +# 真正处理 SIGHUP 的是 master:新模型下 master fork worker, +# worker 会 signal(SIGHUP, SIG_IGN),向其发 HUP 不会触发热重载。 +# master = 父进程不在本部署 server 进程集合中的那个进程 +# (daemon 化后 PPid=1,前台运行时为 shell,均不在集合内)。 +server_master_pid() { local pids p ppid pids="$(server_pids | tr '\n' ' ')" for p in $pids; do ppid="$(awk '/^PPid:/{print $2}' "/proc/$p/status" 2>/dev/null || true)" - case " $pids " in *" $ppid "*) printf '%s' "$p"; return 0 ;; esac + case " $pids " in *" $ppid "*) ;; *) printf '%s' "$p"; return 0 ;; esac done return 1 } @@ -196,11 +198,11 @@ case "$MODE" in mkdir -p "$DEPLOY_PATH/module" mv "$tmp"/module/*.so "$DEPLOY_PATH/module/" - # 优先向真实 worker 发 SIGHUP(等价于 server -s reload,但不依赖 pid 文件/work_path) - worker="$(server_worker_pid || true)" - if [ -n "$worker" ]; then - log "热重载: kill -HUP $worker" - kill -HUP "$worker" || die "向 worker($worker) 发送 SIGHUP 失败" + # 优先向 master 发 SIGHUP(触发 master fork 新 worker,不依赖 pid 文件/work_path) + master="$(server_master_pid || true)" + if [ -n "$master" ]; then + log "热重载: kill -HUP $master" + kill -HUP "$master" || die "向 master($master) 发送 SIGHUP 失败" else server="$(server_bin)" log "热重载: $server -s reload"