BigMouthFlower/palworld-auto-backup-restart

想要每天定时重启

Opened this issue · 8 comments

luoq24 commented

比如每天的6点和下午4点重启
这样对玩家比较友好,能够养成习惯,避免因重启造成损失

请问一下,为啥在备份后资料夹名称只有Backup_呀?

好勒,谢谢你!

luoq24 commented

额,文件名还是不太对
image

额,文件名还是不太对

你在cmd里用下面命令检查下输出是什么

echo %date%
echo %time%

然后适当改一下下面的字符截取,看下hourminute正不正确

set year=%date:~,4%
set month=%date:~5,2%
set day=%date:~8,2%
set time_pad_zero=%TIME: =0%
set hour=%time_pad_zero:~0,2%
set minute=%time_pad_zero:~3,2%
set second=%time_pad_zero:~6,2%
set foldername=%year%-%month%-%day%_%hour%-%minute%-%second%

带了进程守护的

@echo off
set "palworld_path=C:\Users\Administrator\Desktop\PalWorld_Server\steamapps\common\PalServer"
set "backup_path=C:\Users\Administrator\Desktop\backup"

:loop
set year=%date:~,4%
set month=%date:~5,2%
set day=%date:~8,2%
set time_pad_zero=%TIME: =0%
set hour=%time_pad_zero:~0,2%
set minute=%time_pad_zero:~3,2%
set second=%time_pad_zero:~6,2%
set foldername=%year%-%month%-%day%_%hour%-%minute%-%second%

rem Check whether the server is running
tasklist|find /i "PalServer.exe"
if %errorlevel%==0 (
echo Server is running...
) else (
echo Start server...
start "" "%palworld_path%\PalServer.exe"
)

rem if **:00 backup
if "%minute%"=="00" (
    echo [%date% %time%] backup...   
    xcopy "%palworld_path%\Pal\Saved" "%backup_path%\Backup_%foldername%" /E /H /C /I
    echo [%date% %time%] Backup completed!          

    rem if 6:00 am restart server
    if "%hour%"=="06" (
        echo [%date% %time%] Restart server...
        taskkill /f /im "PalServer-Win64-Test-Cmd.exe" 2>nul
        start "" "%palworld_path%\PalServer.exe"
        echo [%date% %time%] Server restarted! 
    ) 
)

rem timer
timeout /t 60 /nobreak >nul

goto loop

請問 為什麼他不會關閉伺服器在重開 導致開了兩個檔案

請問 為什麼他不會關閉伺服器在重開 導致開了兩個檔案

这个需要调试一下taskkill /f /im "PalServer-Win64-Test-Cmd.exe" 2>nul,也可能是其他地方出了问题,如果嫌麻烦可以看看拉取请求里别人发的,还有其他人写的palworld-python-script

额,文件名还是不太对 image

不建议使用%date%来获取当前时间,因为这个输出会因系统设置语言而变化,建议参考本项目中脚本使用的类似

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set datetime=%%a

的命令来获取时间和时期,可以避免地区和语言带来的困扰。

uniZT commented

可以考虑通过windows自带的“任务计划程序”来执行重启。
设置一个定时开启,
再写一个bat,只包含单独一行“taskkill /f /im "PalServer-Win64-Test-Cmd.exe" 2>nul”,定时启动这个bat来关闭程序。
启动程序的“操作”项,在添加参数的位置添加-useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS以启动多线程。
需要注意的是,在创建完基本任务后,点开,常规,下面勾选不管用户是否登录都要运行。
测试只需要启用任务计划,在你当前设置时间的 比如5、6分钟后分别运行,看看是否生效就可以了。一定要勾选不管是否登录都要运行,不然远程桌面断开后,不会运行。

关于备份,windows也有个自动备份的功能,该备份功能仅文件发生变化才会进行备份,所以比如服务器关闭,检测到Saved文件无变化,是不会存储文件的。每天自己上去玩的时候也可以单独再把存档在复制出来进行异地备份。
关于内存,mem reduct,github上直接可以搜到,可以在游戏运行的时候清理内存。也就是说不需要比如20分钟重启游戏,只需要在mem reduct中设置定时清理内存即可,我32g机器,印象中没有超过16g占用,但是同时游玩的人并不多,只有6、7个。

也就是说,在你完全不清楚bat运行原理和语法的情况下,我的上述方案至少可以让你知道你每一步的操作是做什么的。但是要感谢up主,我最早也是直接使用up的方法,受到该方法启发才想到上述方法。