Files
Agent-n8n/n8n-n8n-1.109.2/start.bat.bak
2025-09-08 15:36:24 +08:00

347 lines
8.2 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@echo off
chcp 65001 >nul 2>&1
REM n8n 中文版快速启动脚本 (Windows版)
REM 作者: 小齐
REM 最后更新: 2025-09-08
setlocal enabledelayedexpansion
REM 显示启动横幅
:show_banner
echo ======================================
echo n8n 中文版快速启动脚本
echo 版本: n8n-1.109.2 with 中文翻译
echo 维护者: xiaoqi
echo ======================================
echo.
REM 解析命令行参数
set "DEV_MODE="
set "FORCE_BUILD="
set "CHECK_ONLY="
:parse_args
if "%~1"=="" goto main_execution
if /I "%~1"=="-h" goto show_help
if /I "%~1"=="--help" goto show_help
if /I "%~1"=="-d" (
set "DEV_MODE=true"
shift
goto parse_args
)
if /I "%~1"=="--dev" (
set "DEV_MODE=true"
shift
goto parse_args
)
if /I "%~1"=="-b" (
set "FORCE_BUILD=true"
shift
goto parse_args
)
if /I "%~1"=="--build" (
set "FORCE_BUILD=true"
shift
goto parse_args
)
if /I "%~1"=="-c" (
set "CHECK_ONLY=true"
shift
goto parse_args
)
if /I "%~1"=="--check" (
set "CHECK_ONLY=true"
shift
goto parse_args
)
echo [错误] 未知选项: %~1
goto show_help
:main_execution
REM 检查并切换到正确目录
call :check_and_change_directory
if errorlevel 1 goto error_exit
REM 检查依赖
echo %BLUE%[信息]%NC% 正在检查系统依赖...
call :check_dependencies
if errorlevel 1 goto error_exit
REM 检查端口占用
call :check_port
if errorlevel 1 goto error_exit
REM 停止现有进程
call :stop_existing
REM 设置环境变量
call :setup_environment
REM 仅检查模式
if defined CHECK_ONLY (
echo %GREEN%[成功]%NC% 系统状态检查完成,一切正常
goto end
)
REM 强制构建或检查构建状态
if defined FORCE_BUILD (
echo %BLUE%[信息]%NC% 强制重新构建项目...
call pnpm build > build.log 2>&1
if errorlevel 1 (
echo %RED%[错误]%NC% 构建失败,请查看 build.log
type build.log | more
goto error_exit
)
echo %GREEN%[成功]%NC% 构建完成
) else (
call :check_build
if errorlevel 1 goto error_exit
)
REM 开发模式或正常启动
if defined DEV_MODE (
echo %BLUE%[信息]%NC% 正在以开发模式启动 n8n...
echo %YELLOW%[警告]%NC% 开发模式启动时间较长,请耐心等待...
call pnpm dev
) else (
call :start_n8n
)
goto end
REM ========== 函数定义 ==========
:check_and_change_directory
REM 检查当前目录是否为 n8n 项目目录
if exist "package.json" if exist "packages" (
echo %BLUE%[信息]%NC% 检测到当前已在 n8n 项目目录
exit /b 0
)
REM 获取脚本所在目录
set "SCRIPT_DIR=%~dp0"
set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
REM 如果脚本在 n8n-n8n-1.109.2 目录内
echo %SCRIPT_DIR% | findstr /C:"n8n-n8n-1.109.2" >nul
if not errorlevel 1 (
echo %BLUE%[信息]%NC% 切换到脚本所在的 n8n 项目目录: %SCRIPT_DIR%
cd /d "%SCRIPT_DIR%"
if errorlevel 1 (
echo %RED%[错误]%NC% 无法切换到目录: %SCRIPT_DIR%
exit /b 1
)
echo %GREEN%[成功]%NC% 已切换到正确的 n8n 项目目录
exit /b 0
)
REM 尝试找到 n8n-n8n-1.109.2 目录
if exist "n8n-n8n-1.109.2\" (
cd n8n-n8n-1.109.2
) else if exist "..\n8n-n8n-1.109.2\" (
cd ..\n8n-n8n-1.109.2
) else if exist "..\..\n8n-n8n-1.109.2\" (
cd ..\..\n8n-n8n-1.109.2
) else (
echo %RED%[错误]%NC% 未找到 n8n-n8n-1.109.2 目录
echo %BLUE%[信息]%NC% 请确保在正确的项目目录下运行此脚本
exit /b 1
)
REM 验证目录结构
if not exist "package.json" (
echo %RED%[错误]%NC% 目录结构不正确,缺少 package.json
exit /b 1
)
if not exist "packages" (
echo %RED%[错误]%NC% 目录结构不正确,缺少 packages 目录
exit /b 1
)
echo %GREEN%[成功]%NC% 已切换到正确的 n8n 项目目录
exit /b 0
:check_dependencies
REM 检查 Node.js
where node >nul 2>nul
if errorlevel 1 (
echo %RED%[错误]%NC% Node.js 未安装或未在 PATH 中
exit /b 1
)
REM 检查 pnpm
where pnpm >nul 2>nul
if errorlevel 1 (
echo %RED%[错误]%NC% pnpm 未安装或未在 PATH 中
echo %BLUE%[信息]%NC% 请先安装 pnpm: npm install -g pnpm
exit /b 1
)
echo %GREEN%[成功]%NC% 依赖检查通过
exit /b 0
:check_port
REM 检查端口 5678 是否被占用
netstat -ano | findstr :5678 >nul 2>nul
if not errorlevel 1 (
echo %YELLOW%[警告]%NC% 端口 5678 已被占用
echo %BLUE%[信息]%NC% 正在查看占用进程...
netstat -ano | findstr :5678
set /p "kill_process=是否杀死占用进程?(y/N): "
if /I "!kill_process!"=="y" (
echo %BLUE%[信息]%NC% 正在终止占用进程...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :5678') do (
taskkill /PID %%a /F >nul 2>nul
)
echo %GREEN%[成功]%NC% 进程已终止
) else (
echo %RED%[错误]%NC% 无法启动 n8n端口被占用
exit /b 1
)
)
exit /b 0
:stop_existing
echo %BLUE%[信息]%NC% 正在停止现有的 n8n 进程...
REM 停止可能存在的 n8n 相关进程
taskkill /F /IM node.exe /FI "WINDOWTITLE eq *n8n*" >nul 2>nul
taskkill /F /IM node.exe /FI "WINDOWTITLE eq *pnpm*" >nul 2>nul
REM 等待2秒
timeout /t 2 /nobreak >nul
echo %GREEN%[成功]%NC% 已停止现有进程
exit /b 0
:setup_environment
echo %BLUE%[信息]%NC% 正在设置环境变量...
set "N8N_DEFAULT_LOCALE=zh-CN"
set "N8N_SECURE_COOKIE=false"
set "DB_SQLITE_POOL_SIZE=5"
set "N8N_RUNNERS_ENABLED=true"
set "N8N_BLOCK_ENV_ACCESS_IN_NODE=false"
echo %GREEN%[成功]%NC% 环境变量已设置
echo - N8N_DEFAULT_LOCALE=zh-CN
echo - N8N_SECURE_COOKIE=false
echo - DB_SQLITE_POOL_SIZE=5
exit /b 0
:check_build
if not exist "packages\cli\dist\" (
goto need_build
)
if not exist "packages\core\dist\" (
goto need_build
)
exit /b 0
:need_build
echo %YELLOW%[警告]%NC% 检测到项目需要构建
set /p "build_project=是否现在构建项目?这可能需要几分钟时间 (y/N): "
if /I "!build_project!"=="y" (
echo %BLUE%[信息]%NC% 正在构建项目...
call pnpm build > build.log 2>&1
if errorlevel 1 (
echo %RED%[错误]%NC% 构建失败,请查看 build.log
type build.log | more
exit /b 1
)
echo %GREEN%[成功]%NC% 项目构建完成
)
exit /b 0
:start_n8n
echo %BLUE%[信息]%NC% 正在启动 n8n 中文版...
REM 创建日志文件名
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (
set "today=%%c%%a%%b"
)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
set "now=%%a%%b"
)
set "LOG_FILE=n8n-%today%-%now%.log"
set "LOG_FILE=%LOG_FILE: =%"
echo %GREEN%正在启动 n8n 服务...%NC%
REM 启动 n8n 在新窗口
start "n8n Server" /B cmd /c "pnpm start > %LOG_FILE% 2>&1"
REM 等待启动
echo 等待 n8n 启动
set "count=0"
:wait_loop
set /a count+=1
if %count% gtr 30 goto start_failed
REM 检查端口是否开启
netstat -an | findstr :5678 | findstr LISTENING >nul 2>nul
if not errorlevel 1 goto start_success
REM 显示进度点
<nul set /p "=."
timeout /t 1 /nobreak >nul
goto wait_loop
:start_success
echo.
echo %GREEN%[成功]%NC% n8n 启动成功!
echo.
echo %GREEN%========== 启动信息 ==========%NC%
echo 📱 访问地址: %BLUE%http://localhost:5678%NC%
echo 🌏 界面语言: %GREEN%中文 (zh-CN)%NC%
echo 📝 日志文件: %YELLOW%%LOG_FILE%%NC%
echo %GREEN%=============================%NC%
echo.
echo %BLUE%[信息]%NC% 使用 Ctrl+C 停止服务
echo.
echo %YELLOW%[提示]%NC% 正在监控日志输出...
echo.
REM 持续显示日志
:tail_log
if exist "%LOG_FILE%" (
type "%LOG_FILE%"
timeout /t 2 /nobreak >nul
goto tail_log
)
exit /b 0
:start_failed
echo.
echo %RED%[错误]%NC% n8n 启动失败
echo %BLUE%[信息]%NC% 查看日志文件: %LOG_FILE%
if exist "%LOG_FILE%" (
type "%LOG_FILE%" | more
)
exit /b 1
:show_help
echo 用法: %~nx0 [选项]
echo.
echo 选项:
echo -h, --help 显示此帮助信息
echo -d, --dev 使用开发模式启动 (支持热重载)
echo -b, --build 强制重新构建项目
echo -c, --check 仅检查系统状态,不启动
echo.
echo 示例:
echo %~nx0 # 正常启动
echo %~nx0 -d # 开发模式启动
echo %~nx0 -b # 重新构建并启动
echo.
goto end
:error_exit
echo %RED%[错误]%NC% 脚本执行失败
pause
exit /b 1
:end
endlocal
pause
exit /b 0