背景:服务器跑java应用(.jar)有CMD窗口,容易别误关,千万应用不能正常使用

问题:

1、有Nginx、Redis 和 Java 服务需要做成服务或者后台执行

2、重启服务器自动启动应用服务

解决:

1、Nginx启动后本来就没有窗口,所有不需要处理

2、Redis,可以先通过下面命令,先将Redis注册到服务
--安装 Redis 服务
进入 Redis 的安装目录(如 C:\redis),执行:
redis-server --service-install redis.windows.conf --loglevel verbose
--卸载服务
redis-server --service-uninstall

3、将下面的码保存起来,做成.bat文件(用记事本、写字板操作,其它高级工具反而容易乱码)

@echo off
chcp 936 >nul 2>&1
setlocal enabledelayedexpansion

:: ===================== 配置区(必须修改为实际路径)=====================
:: Nginx安装目录(nginx.exe所在的绝对路径,示例:D:\nginx-1.24.0)
set "NGINX_PATH=D:\nginx-1.22.1"
:: Redis服务名称(默认是Redis,若自定义过请修改)
set "REDIS_SERVICE_NAME=Redis"
:: Java服务jar包绝对路径(示例:D:\java-server\server.jar)
set "JAR_PATH=D:\organism-admin.jar"
:: Java启动参数(根据需要调整)
set "JAVA_OPTS=-Xms512m -Xmx1024m -Dserver.port=8080"
:: 日志输出目录(自动创建,无需修改)
set "LOG_DIR=%~dp0service_logs"
:: =====================================================================

:: 创建日志目录
if not exist "%LOG_DIR%" md "%LOG_DIR%"

:: 定义日志文件
set "NGINX_LOG=%LOG_DIR%\nginx_start.log"
set "REDIS_LOG=%LOG_DIR%\redis_start.log"
set "JAVA_LOG=%LOG_DIR%\java_server.log"
set "ERROR_LOG=%LOG_DIR%\error.log"

echo.
echo ===================== 开始启动服务 =====================
echo 启动时间:%date% %time%
echo =======================================================
echo.

:: 1. 启动Nginx(无窗口后台运行)
echo [1/3] 启动Nginx...
if exist "%NGINX_PATH%\nginx.exe" (
    pushd "%NGINX_PATH%"
    taskkill /f /im nginx.exe >nul 2>&1
    start /b nginx.exe >"%NGINX_LOG%" 2>&1
    if !errorlevel! equ 0 (
        echo      Nginx启动成功 (日志:%NGINX_LOG%)
    ) else (
        echo      [ERROR] Nginx启动失败 (日志:%ERROR_LOG%)
        echo      错误代码:!errorlevel! >>"%ERROR_LOG%"
    )
    popd
) else (
    echo      [ERROR] Nginx可执行文件不存在:%NGINX_PATH%\nginx.exe
    echo      请检查配置区的NGINX_PATH是否正确 >>"%ERROR_LOG%"
)

:: 2. 启动Redis(Windows系统服务方式)
echo [2/3] 启动Redis服务...
sc stop "%REDIS_SERVICE_NAME%" >nul 2>&1
sc start "%REDIS_SERVICE_NAME%" >"%REDIS_LOG%" 2>&1
if !errorlevel! equ 0 (
    echo      Redis服务启动成功 (日志:%REDIS_LOG%)
) else (
    echo      [ERROR] Redis服务启动失败 (日志:%ERROR_LOG%)
    echo      错误代码:!errorlevel! >>"%ERROR_LOG%"
    echo      提示:请检查Redis服务名称是否正确(当前配置:%REDIS_SERVICE_NAME%) >>"%ERROR_LOG%"
)

:: 3. 启动Java服务(无窗口后台运行)
echo [3/3] 启动Java服务...
if exist "%JAR_PATH%" (
    :: 停止已有Java进程
    for /f "tokens=2 delims= " %%i in ('tasklist /fi "imagename eq java.exe" /fo list ^| findstr /i "PID"') do (
        taskkill /f /pid %%i >nul 2>&1
    )
    for /f "tokens=2 delims= " %%i in ('tasklist /fi "imagename eq javaw.exe" /fo list ^| findstr /i "PID"') do (
        taskkill /f /pid %%i >nul 2>&1
    )
    :: 启动Java服务
    start /b javaw -jar "%JAR_PATH%" >"%JAVA_LOG%" 2>&1
    if !errorlevel! equ 0 (
        echo      Java服务启动成功 (日志:%JAVA_LOG%)
    ) else (
        echo      [ERROR] Java服务启动失败 (日志:%ERROR_LOG%)
        echo      错误代码:!errorlevel! >>"%ERROR_LOG%"
    )
) else (
    echo      [ERROR] Java服务jar包不存在:%JAR_PATH%
    echo      请检查配置区的JAR_PATH是否正确 >>"%ERROR_LOG%"
)

4、将上面保存的.bat文件放到开机启动里,就OK了

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐