update script
This commit is contained in:
@@ -8,7 +8,6 @@ set -e
|
|||||||
SERVICE_NAME="oai-team-bot"
|
SERVICE_NAME="oai-team-bot"
|
||||||
SERVICE_DESC="OpenAI Team Provisioner Bot"
|
SERVICE_DESC="OpenAI Team Provisioner Bot"
|
||||||
WORK_DIR="$(cd "$(dirname "$0")" && pwd)"
|
WORK_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
PYTHON_BIN="${WORK_DIR}/.venv/bin/python"
|
|
||||||
SCRIPT_NAME="telegram_bot.py"
|
SCRIPT_NAME="telegram_bot.py"
|
||||||
USER="${SUDO_USER:-root}"
|
USER="${SUDO_USER:-root}"
|
||||||
|
|
||||||
@@ -38,18 +37,36 @@ check_env() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查 Python 环境
|
# 检测 uv
|
||||||
if [ ! -f "$PYTHON_BIN" ]; then
|
if command -v uv &> /dev/null && [ -f "${WORK_DIR}/pyproject.toml" ]; then
|
||||||
log_warn "未找到 .venv,尝试使用系统 Python"
|
UV_BIN=$(which uv)
|
||||||
|
|
||||||
|
# 先执行 uv sync 安装依赖
|
||||||
|
log_info "执行 uv sync 安装依赖..."
|
||||||
|
cd "${WORK_DIR}"
|
||||||
|
sudo -u ${USER} ${UV_BIN} sync
|
||||||
|
log_success "依赖安装完成"
|
||||||
|
|
||||||
|
# 使用 uv run 运行
|
||||||
|
EXEC_CMD="${UV_BIN} run python ${SCRIPT_NAME}"
|
||||||
|
log_info "使用 uv run 运行"
|
||||||
|
elif [ -f "${WORK_DIR}/.venv/bin/python" ]; then
|
||||||
|
# 使用 .venv
|
||||||
|
EXEC_CMD="${WORK_DIR}/.venv/bin/python ${WORK_DIR}/${SCRIPT_NAME}"
|
||||||
|
log_info "使用 .venv 虚拟环境"
|
||||||
|
else
|
||||||
|
# 使用系统 python
|
||||||
PYTHON_BIN=$(which python3 || which python)
|
PYTHON_BIN=$(which python3 || which python)
|
||||||
if [ -z "$PYTHON_BIN" ]; then
|
if [ -z "$PYTHON_BIN" ]; then
|
||||||
log_error "找不到 Python"
|
log_error "找不到 Python 或 uv"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
EXEC_CMD="${PYTHON_BIN} ${WORK_DIR}/${SCRIPT_NAME}"
|
||||||
|
log_warn "使用系统 Python,可能缺少依赖"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "工作目录: ${WORK_DIR}"
|
log_info "工作目录: ${WORK_DIR}"
|
||||||
log_info "Python: ${PYTHON_BIN}"
|
log_info "启动命令: ${EXEC_CMD}"
|
||||||
log_info "运行用户: ${USER}"
|
log_info "运行用户: ${USER}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +74,12 @@ check_env() {
|
|||||||
install_service() {
|
install_service() {
|
||||||
log_info "正在安装 ${SERVICE_NAME} 服务..."
|
log_info "正在安装 ${SERVICE_NAME} 服务..."
|
||||||
|
|
||||||
|
# 获取 uv 路径用于 PATH
|
||||||
|
UV_PATH=""
|
||||||
|
if command -v uv &> /dev/null; then
|
||||||
|
UV_PATH="$(dirname $(which uv)):"
|
||||||
|
fi
|
||||||
|
|
||||||
# 创建 systemd service 文件
|
# 创建 systemd service 文件
|
||||||
cat > /etc/systemd/system/${SERVICE_NAME}.service << EOF
|
cat > /etc/systemd/system/${SERVICE_NAME}.service << EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -69,7 +92,7 @@ Type=simple
|
|||||||
User=${USER}
|
User=${USER}
|
||||||
Group=${USER}
|
Group=${USER}
|
||||||
WorkingDirectory=${WORK_DIR}
|
WorkingDirectory=${WORK_DIR}
|
||||||
ExecStart=${PYTHON_BIN} ${WORK_DIR}/${SCRIPT_NAME}
|
ExecStart=${EXEC_CMD}
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=10
|
RestartSec=10
|
||||||
StandardOutput=journal
|
StandardOutput=journal
|
||||||
@@ -78,11 +101,11 @@ StandardError=journal
|
|||||||
# 环境变量
|
# 环境变量
|
||||||
Environment="PYTHONUNBUFFERED=1"
|
Environment="PYTHONUNBUFFERED=1"
|
||||||
Environment="LOG_LEVEL=INFO"
|
Environment="LOG_LEVEL=INFO"
|
||||||
|
Environment="PATH=${UV_PATH}/usr/local/bin:/usr/bin:/bin"
|
||||||
|
Environment="HOME=/root"
|
||||||
|
|
||||||
# 安全限制
|
# 安全限制 (root 用户不使用 ProtectSystem)
|
||||||
NoNewPrivileges=true
|
NoNewPrivileges=true
|
||||||
ProtectSystem=strict
|
|
||||||
ReadWritePaths=${WORK_DIR}
|
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
Reference in New Issue
Block a user