蔡文洋
蔡文洋
发布于 2024-01-27 / 37 阅读

windows服务器自启检测 frp服务器自启检测 数据自动备份

windows服务器自启检测 frp服务器自启检测 数据自动备份

下载

点我下载

源码:

@echo off
rem windows服务器自启检测 frp服务器自启检测 数据自动备份 自动脚本by 蔡文洋V1.1

rem ================开发者的更新公告======================
rem V1.0自动启动服务器和Frp防崩自动重启
rem V1.1增加存档定时备份功能 更多的自定义选项
rem =====================================================================================================

rem *****************************************************
rem 脚本自定义设置区域
rem *****************************************************
rem =====================================================================================================
rem *****************************************************
rem 设置进程名称(默认守护process_name01游戏服务器和process_name02 Frp内网穿透服务不用更改)
rem 进程名在任务管理中可以查看
set process_name01="GameServer.exe"
set process_name02="frpc.exe"

rem 进程检测时间(单位:秒)(建议大于等于60因为自动存档会在同一分钟内反复操作 虽然影响不大... 而且也会自动覆盖)
set detection_interval=60
rem *****************************************************

rem *****************************************************
rem 设置游戏服务器启动路径(GameSever.exe)
set server_start_path="D:\GameServer\GameServer.exe"
rem *****************************************************

rem *****************************************************
rem 设置frp内网穿透启动路径(run.bat)
set frp_start_path="D:\Frp\run.bat"
rem *****************************************************

rem =====================================================
rem 自动备份设置
rem *****************************************************
rem 备份的文件夹路径(游戏服务器存档位置)
set server_save_path="D:\Game\saved"

rem 保存的目的地
set destination_path="D:\Game\saved_buckup"

rem 保存的时间间隔(单位:分)
set /A save_time_interval=30
rem *****************************************************


rem =====================================================
rem 以下是代码区域 只修改上面的
rem =====================================================
rem ====================================================================================================

rem 初始化时间信息
set /A last_save_time_m=%time:~3,2%
set last_save_time_all=检测到初次启动脚本--稍后自动存档

goto check

:auto_save

cls

echo 备份中...
echo.

rem xcopy会递归地复制整个文件夹以及其子文件夹和文件到目标文件夹中 
rem `/E` 表示复制文件夹及其子文件夹和文件
rem `/I` 表示如果目标路径不存在并且包含多个文件或目录,则假设目标路径是要复制的文件,而不是询问用户是否要复制目录或多个文件
rem `/Y` 表示在复制过程中不会提示用户确认覆盖现有的目标文件。

start cmd /C "xcopy /E /I /Y %server_save_path% %destination_path%\"%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分"_自动存档"
echo 备份成功(%destination_path%)
echo.

rem 记录上次存档时间
set /A last_save_time_m=%time:~3,2%
set last_save_time_all=%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分


rem 等待3s
timeout /t 3 /nobreak >nul

rem 清屏
cls
goto wait_next


rem 设置循环点check检查点
:check
echo 正在启动防崩溃脚本
echo.
rem 等待1s
timeout /t 1 /nobreak >nul

echo ===================================================
echo 服务器自启检测_frp服务器自启检测_数据自动备份V1.1
echo ===================================================
echo.
echo 防崩溃脚本开启成功
echo ===================================================
echo 游戏服务器
echo Frp内网穿透服务
echo ===================================================
echo 已设置每%save_time_interval%分保存服务器存档一次
echo ===================================================
echo.

rem 等待1s
timeout /t 1 /nobreak >nul


rem 查找判断游戏服务器是否正常开启
tasklist | findstr /i %process_name01% >nul 2>&1
if errorlevel 1 (
	echo 检测到游戏服务器未启动或意外关闭 3s后开启
	echo.
	rem 等待3s
	timeout /t 3 /nobreak >nul
	start "" "%server_start_path%"
	echo 已成功启动游戏服务器
	echo.
) else (
	echo 游戏服务器运行正常...
	echo.
)

rem 等待1s
timeout /t 1 /nobreak >nul

rem 查找判断frp服务是否正常开启
tasklist | findstr /i %process_name02% >nul 2>&1
if errorlevel 1 (
	echo 检测到Frp服务未启动或意外关闭 3s后开启
	echo.
	rem 等待3s
	timeout /t 3 /nobreak >nul
	rem 开启frp服务
	start cmd /k "call %frp_start_path%"
	echo 已成功启动frp服务
	echo.
) else (
	echo Frp服务正常开启中...
	echo.
)

rem 等待1s
timeout /t 1 /nobreak >nul

rem 当前检测时间
set /A check_time_m = %time:~3,2%

echo.
echo ===================================================
echo.
echo 当前检测时间:%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分
echo.
echo 上次存档时间:%last_save_time_all%
echo.

rem 判断自动存档时间点
if %check_time_m% gtr %last_save_time_m% (
	set /A temp_num_m =%last_save_time_m%+%save_time_interval%-%check_time_m%
) else if %check_time_m% lss %last_save_time_m% (
	set /A temp_num_m =%last_save_time_m%-%check_time_m%-%save_time_interval%
) else (
	set /A temp_num_m =0
)

echo 距离下次备份还有%temp_num_m%分
echo.

rem 存档点
if %temp_num_m% == 0 (echo 3s后自动备份存档 && timeout /t 3 /nobreak >nul && goto auto_save)

rem 等待下次检测点
:wait_next
rem 等待1s
timeout /t 1 /nobreak >nul

echo %detection_interval%s后进入下一次检测
echo.

rem 等待设定的秒数detection_interval后再次检测
timeout /t %detection_interval% /nobreak >nul

rem 清屏
cls

rem 进入下一次循环
goto check