我正在尝试为我的FiveM服务器创建一个重新启动脚本,这是我到目前为止拥有的代码:
@echo off
:: Config
TITLE CFR FIVEM SERVER
set reboot1 = 00
set reboot2 = 06
set reboot3 = 12
set reboot4 = 18
:: Logic
: start
echo [%time%] - Server Started!
start D:\Server\run.bat +exec server.cfg
goto loop
: restart
echo [%time%] - Server Reboot
taskkill /f /im FXServer.exe >nul
timeout /t 10 >null
goto start
: loop
timeout /t 5 >null
set tps = %TIME:~-0,2%
echo %tps%
if %tps%==%reboot1% goto restart
if %tps%==%reboot2% goto restart
if %tps%==%reboot3% goto restart
if %tps%==%reboot4% goto restart我希望它每6小时重新启动一次。例如: 00:00,06:00,12:00和6:00
当我运行它(启用echo )时,循环中的echo和if语句变量在控制台中显示为空。例如,控制台认为它的:if == goto restart
有人能帮我解决这个问题吗?谢谢!
发布于 2020-05-17 13:36:00
除了我看不出为什么不在需要的时候从任务调度器运行D:\Server\run.bat,并且使用+exec server.cfg作为参数之外,我可能会对您似乎试图做的事情提供这种增强。
@Echo Off & SetLocal EnableExtensions
Title CFR FIVEM SERVER
Call :CheckIfRunning
If ErrorLevel 1 (Echo [%TIME%] Starting Server
GoTo StartServer)
:GetHourMatch
Set "#=1" & For /F "Tokens=2Delims=: " %%G In (
'"%__AppDir__%Robocopy.exe \: . /NJH /L|%__AppDir__%find.exe " 123""'
) Do Set /A "#=(1%%G%%25)%%6"
If %#% Neq 0 GoTo :EOF
:KillServer
%__APPDIR__%taskkill.exe /F /Im FXServer.exe >NUL
:Loop
If %#% Equ 11 (Echo [%TIME%] - Reboot Error
GoTo :EOF)
%__APPDIR__%timeout.exe /T 3 /NoBreak >NUL
Call :CheckIfRunning
If ErrorLevel 1 (Echo [%TIME%] - Server Reboot
GoTo StartServer)
Set /A #+=1
GoTo Loop
:StartServer
Start D:\Server\run.bat +exec server.cfg
GoTo :EOF
:CheckIfRunning
%__APPDIR__%tasklist.exe /Fi "ImageName Eq FXServer.exe"^
/Fi "Status Eq Running" /Fo CSV /NH^
| %__APPDIR__%findstr.exe /I "\"FXServer.exe\"">NUL && (
Exit /B 0) || Exit /B 1脚本的思想是,在启动时,它检查FXServer.exe是否正在运行,如果不是,它只是运行D:\Server\run.bat +exec server.cfg来启动它,然后关闭。如果它正在运行,它将检查时间( HH )是否为00、06、12或18,如果不是,则关闭脚本。
此时,如果脚本仍在运行,这意味着FXServer.exe正在运行,时间不是00、06、12还是18,因此它会杀死试图杀死FXServer.exe的尝试。然后,它进入一个循环,检查FXServer.exe是否正在运行,以便再次启动它(在它停止之前,您不能启动它)。它将用10第二次间隔来检查这一点,以确保给它足够的时间来干净地杀死它。一旦检查表明它没有运行,D:\Server\run.bat +exec server.cfg就会运行,脚本就会关闭。如果经过10检查(大约30秒),它表示FXServer.exe仍在运行,将打印错误消息并关闭脚本。
https://stackoverflow.com/questions/61819437
复制相似问题