Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dependencies.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"chen-sdk": {
"repo": "Chen-Christins/chen",
"version": "1.5.5",
"version": "1.5.6-rc3",
"arch": "auto"
},
"thirdparty": {
Expand Down
24 changes: 13 additions & 11 deletions scripts/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -194,13 +196,13 @@ 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)"
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"
Expand Down
5 changes: 0 additions & 5 deletions src/blog_module.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,6 @@ bool BlogModule::onUnload() {
return true;
}

bool BlogModule::onActivate() {
INFO(logger) << "onActivate";
return true;
}

bool BlogModule::onDeactivate() {
INFO(logger) << "onDeactivate";

Expand Down
8 changes: 0 additions & 8 deletions src/blog_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 新模块已接管,旧模块停止接收新请求。
Expand Down
Loading