无服务修复

This commit is contained in:
2025-11-21 18:15:02 +08:00
parent b0ad58ecd4
commit dab1e43305
2 changed files with 81 additions and 2 deletions

View File

@@ -293,8 +293,9 @@ build_from_source() {
create_service() { create_service() {
echo -e "${BLUE}创建 systemd 服务...${NC}" echo -e "${BLUE}创建 systemd 服务...${NC}"
# 确保 run.sh 有执行权限 # 确保启动脚本有执行权限
sudo chmod +x "$SOURCE_DIR/run.sh" sudo chmod +x "$SOURCE_DIR/run.sh"
sudo chmod +x "$SOURCE_DIR/start-systemd.sh"
sudo tee /etc/systemd/system/${SERVICE_NAME}.service > /dev/null <<EOF sudo tee /etc/systemd/system/${SERVICE_NAME}.service > /dev/null <<EOF
[Unit] [Unit]
@@ -305,7 +306,7 @@ After=network.target
Type=simple Type=simple
User=root User=root
WorkingDirectory=$SOURCE_DIR WorkingDirectory=$SOURCE_DIR
ExecStart=$SOURCE_DIR/run.sh start ExecStart=$SOURCE_DIR/start-systemd.sh
Restart=always Restart=always
RestartSec=5 RestartSec=5
Environment="BACKEND_URL=$BACKEND_URL" Environment="BACKEND_URL=$BACKEND_URL"

78
start-systemd.sh Normal file
View File

@@ -0,0 +1,78 @@
#!/bin/bash
# ============================================
# LinkMaster 节点端 systemd 启动脚本
# 用于 systemd 服务,直接运行二进制文件
# ============================================
set -e
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 配置
BINARY_NAME="agent"
BACKEND_URL="${BACKEND_URL:-http://localhost:8080}"
# 拉取最新源码并编译
update_and_build() {
# 检查是否在 Git 仓库中
if [ ! -d ".git" ]; then
return 0
fi
# 配置 Git safe.directory解决所有权问题
CURRENT_DIR=$(pwd)
git config --global --add safe.directory "$CURRENT_DIR" 2>/dev/null || true
# 拉取最新代码
if git pull 2>&1 > /dev/null; then
echo "代码更新完成"
fi
# 检查 Go 环境
if ! command -v go > /dev/null 2>&1; then
echo "错误: 未找到 Go 环境,无法编译" >&2
exit 1
fi
# 更新依赖
go mod download 2>&1 > /dev/null || true
# 编译
ARCH=$(uname -m)
case $ARCH in
x86_64)
ARCH="amd64"
;;
aarch64|arm64)
ARCH="arm64"
;;
*)
ARCH="amd64"
;;
esac
if GOOS=linux GOARCH=${ARCH} CGO_ENABLED=0 go build -buildvcs=false -ldflags="-w -s" -o "$BINARY_NAME" ./cmd/agent 2>&1; then
if [ -f "$BINARY_NAME" ] && [ -s "$BINARY_NAME" ]; then
chmod +x "$BINARY_NAME"
else
echo "错误: 编译失败,未生成二进制文件" >&2
exit 1
fi
else
echo "错误: 编译失败" >&2
exit 1
fi
}
# 拉取最新源码并编译
update_and_build
# 设置环境变量
export BACKEND_URL="$BACKEND_URL"
# 直接运行二进制文件systemd 会管理进程)
exec ./"$BINARY_NAME"