宝塔面板webhook配置
#!/bin/bash
# ==========================
#【使用说明】
# 修改正确项目路径后根据前端项目配置打包和重启命令即可
# ==========================
# 1. 切换到项目目录并拉取最新的代码
echo "切换到项目目录并拉取最新代码..."
su - www -c "git -C /www/wwwroot/项目目录/ checkout ." # 清除本地修改
su - www -c "git -C /www/wwwroot/项目目录/ pull" # 拉取远程仓库的最新代码
# 2. 安装依赖并打包
echo "开始安装依赖..."
su - www -c "cd /www/wwwroot/项目目录/前端目录 && pnpm install"
echo "依赖安装完成,开始构建项目..."
su - www -c "cd /www/wwwroot/项目目录/前端目录 && pnpm build:ssr"
echo "项目构建完成,开始搜索服务进程..."
# 3. 读取 .pid 文件中的主进程 PID
pid_file="/www/server/nodejs/vhost/pids/前端项目名称.pid"
if [ ! -f "$pid_file" ]; then
echo "PID 文件不存在,无法杀死进程!"
exit 1
fi
# 获取主进程 PID
parent_pid=$(cat "$pid_file")
echo "主进程 PID 为: $parent_pid"
# 确保 PID 是有效的数字
if ! [[ "$parent_pid" =~ ^[0-9]+$ ]]; then
echo "无效的 PID:$parent_pid"
exit 1
fi
# 4. 查找并杀死所有与主进程相关的子进程
echo "正在终止与主进程 PID $parent_pid 相关的所有进程..."
# 递归查找子进程的函数
kill_descendants() {
local pid=$1
# 查找该进程的所有子进程
child_pids=$(ps --ppid "$pid" -o pid=)
# 如果有子进程,递归终止它们
for child_pid in $child_pids; do
kill_descendants "$child_pid" # 递归终止子进程
echo "已终止子进程 PID $child_pid"
kill -9 "$child_pid" 2>/dev/null # 强制终止子进程
done
}
# 调用递归函数终止所有子进程
kill_descendants "$parent_pid"
# 最后终止主进程
echo "已终止主进程 PID $parent_pid"
kill -9 "$parent_pid" 2>/dev/null
# 5. 重启项目
echo "主进程及相关进程已全部终止,开始重启node项目..."
su - www -c "bash /www/server/nodejs/vhost/scripts/前端项目名称.sh"
echo "node项目重启完成!"
# 6. 输出脚本执行完成信息
echo "Webhook 脚本执行完成!"
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。