#windows #batch-file
#Windows #пакетный файл
Вопрос:
Хорошо, итак, я создал сервер Rust. Я запускаю программу с .bat
файла. .bat
Файл содержит:
rust_server.exe -batchmode -hostname "XtraRust" -cfg "cfg/server.cfg" -maxplayers 25 -port 28015 -datadir "serverdata/" -map "rust_island_2013"
Как мне создать пакетный файл для запуска этого и завершения работы через 2 часа, а затем снова запустить программу, чтобы все было автоматизировано?
Я попытался с помощью:
@echo off
:loop
start rust_server.exe
timeout /t 1200 >null
taskkill /f /im rust_server.exe >nul
goto loop
Но он начинает открывать файл каждые 0,25 секунды, что приведет к сбою компьютера.
Комментарии:
1. Почему все пытаются делать все в пакетном файле, когда в Windows есть вполне удобный планировщик задач? Запланированная задача, которая выполняется каждые два часа, которая выполняет
taskkill
, а затем запускает rust, была бы абсолютно идеальной для этого, вместо того, чтобы так усердно пытаться выполнить это в пакетном файле.2. Я никогда раньше не использовал планировщик задач. Как мне заставить его завершить выполнение задачи через 2 часа, а затем автоматически запуститься снова?
3. Планировщик задач предназначен не для работы, а для запуска процесса. Вы можете указать планировщику запускать пакетный файл каждые два часа, и пакетный файл выполнит всю работу (завершит работу и запустится), а затем завершит работу, пока не будет перезапущен снова через два часа.
Ответ №1:
У меня тоже есть сервер. Та же проблема. Есть только один способ перезапустить сервер через 2 часа, потому что batch занят подготовкой команды start rust_server.exe. Он не прекратит выполнение команды, пока вы не перезагрузите сервер вручную. Единственный способ сделать это — другой пакетный файл.
@echo off
:loop
timeout /t <insert seconds here>
taskkill /im rust_server.exe
goto loop
единственная проблема с этим заключается в том, что это, возможно, приведет к повреждению сервера. На мой сервер, которым является Minecraft, вы можете добавить плагин (или модификацию) для автоматического сохранения игры каждые 2 часа. Я не знаю, можете ли вы изменить код сервера rust. Но если вы можете, сделайте так, чтобы игра сохранялась до того, как ваш новый пакетный файл перезапустит сервер.
что касается пакетного файла для открытия сервера, используйте это:
@echo off
color b9
mode 1000
:main
cls
rust_server.exe -batchmode -hostname "XtraRust" -cfg "cfg/server.cfg" -maxplayers 25 -port 28015 -datadir "serverdata/" -map "rust_island_2013"
Лол, мне нравятся эти цвета. «Режим 1000» делает его полноэкранным.
Комментарии:
1. Уже действительно поздно, но спасибо за ваш ответ, я собираюсь попробовать это позже.
Ответ №2:
Нет видимой причины, по которой ваш пакет действует так, как вы сообщаете.
Похоже, что timeout
происходит сбой. Он находится на вашем path
компьютере? Это должно быть в c:windowssystem32
стандартной установке.
Вы выводите данные timeout
в null
, который создаст файл с именем null
. Слишком много l
файлов для вывода на ваше nul
устройство. Однако это не должно вызвать вашу проблему.
Вы могли бы попробовать
выбор / t 1200 / d y > nul
которая должна эффективно выполнять то же самое.
Мне любопытно, что вы вызываете rust_server.exe
в своем пакете — без параметров, когда вы говорите, что у вас есть пакетный файл для вызова rust_server.exe
с параметрами. Вы случайно не вызывали этот файл rust_server.exe.bat
, не так ли? Не то чтобы это вызвало проблему — просто странная идея.
Я не вижу реальной дополнительной ценности в использовании task scheduler
для того, что вам требуется. Вы должны быть в состоянии убедиться, что запланированное задание выполняется под правильными учетными данными — именем пользователя, паролем, разрешениями и путевыми соображениями. Затем вам нужно будет запланировать отправку пакета на taskkill
существующий сервер и запустить новый.
Я был подвергнут более чем часовому сеансу визга от «системного администратора», который утверждал, что невозможность запуска запланированных задач была «хорошо известной» проблемой, которую «никто в мире не смог решить». Тот факт, что Microsoft выпустила исправление тремя годами ранее (и оно было установлено), был несущественным (она не прекращала разглагольствовать, чтобы послушать это.)
Возможно, именно поэтому у меня аллергия на планировщик заданий — возможно, вам потребуется исправить свою версию. YMMV.