#python #debian
#python #debian
Вопрос:
Я запускаю сервер Minecraft для своих друзей и я с Raspberry Pi. Помимо задержек (из-за моего Интернета, а не аппаратного обеспечения), сервер работает бесперебойно, однако мой Pi хочет время от времени отключаться (если консоль сервера выходит из строя, или экран решает закрыть этот сеанс и т. Д.). Что я хочу сделать, это создать скрипт python, который запускается в полночь и в полдень каждый день, чтобы выдавать несколько команд через консоль сервера и самому pi.
Доступ к консоли сервера осуществляется через screen -r Minecraft
, поэтому я могу закрыть сеанс SSH и оставить сервер запущенным. Если сервер не запущен, его можно запустить с помощью ./minecraft.sh
.
Вот, по сути, что я хочу сделать: (Извините, я очень мало знаю python, кроме того, что мне нужно для навигации по консоли pi) (я больше знаком с C #, поэтому прошу прощения, если мой код больше похож на это, а не на Python) Примечание: Команды, выдаваемые на экран консоли сервера -r minecraft, не требуют кавычек вокруг некомандного текста, т.е. Say Words отправит слова в игровой чат, но Say «Words» отправит «Слова» в игровой чат.
//SafeShutDown.py
//This code is in no way executable. I just typed it out as an outline. A lot is wrong with it I'm assuming.
Loop A;
If dateTime.Now == 12:00 or dateTime.Now == 24:00 {
screen -r Minecraft
say Server saving... //In minecraft console. Announces to players
autosave all //In minecraft console. Plugin to save the world
say Server is restarting in 1 minute. Please wait //In Minecraft console
wait 60s //In python
stop //Command to send within the process "Minecraft" to shutdown server
wait for process "Screen -r Minecraft" to terminate //This is what I need help with
reboot
Else { Go To A;}
// Other scripts here that starts at boot to run ./minecraft.sh and ./SafeShutDown.py from /home/Minecraft.
Я пытался запустить скрипты при загрузке, но безрезультатно. Minecraft.sh предполагается, что он запускается при загрузке, поэтому в случае сбоя все равно будет выполняться (Minecraft.sh запускает сервер под screen -r Minecraft, чтобы я мог добраться до него позже)
Правка: правописание, объяснение на C #, лучший код. Редактировать: Описания команд Minecraft, добавленные объявления и состояние сохранения.
Комментарии:
1. Ну, вы можете написать скрипт, который запускает подпроцесс. Popen([‘ваш’, ‘сервер’, ‘команда’]) каждые 12 часов
2. Такая простая логика может быть легко выполнена с помощью cron вместо python. Вы думали об использовании cron? Часть уничтожения также довольно проста с помощью сценариев bash.
pkill -f minecraft
3. @ThuYeinTun да, это сработало бы, однако я хочу запустить команду stop на сервере, а не просто останавливать процесс. Я хочу, чтобы все сохраненные материалы были запущены. И мне нужно было бы объявить в игровом чате, что происходит завершение работы.
4. @ArtiomKozyrev будет ли это работать, как
subprocess.Popen(screen -r Minecraft; stop);
, а затем ждать завершения процессаscreen -r Minecraft
для перезагрузки pi? Извините, я не могу ничего протестировать на своем Pi прямо сейчас, потому что он отключен и по какой-то причине не будет автоматически восстанавливаться, поэтому я не могу подключиться к нему по SSH, как обычно.5. @Gagewillson Я привел пример, он связан с win, может сделать то же самое в Unix, в Unix проще выполнить несколько команд подряд: import subprocess encoding = ‘latin1’ p = подпроцесс. Popen(‘cmd.exe ‘, stdin=подпроцесс. КАНАЛ, стандартный вывод= подпроцесс. КАНАЛ, stderr= подпроцесс. КАНАЛ, оболочка= True) cmds = [] cmds.append(«cd C:\UsersLOL\Desktop \ n») cmds.append(«dir n») cmds.append(«ping 127.0.0.1 n») cmds.append(«ping 127.0.0.2 n») для cmd в cmds: p.stdin.write(cmd.encode(‘utf-8’)) p.stdin.close() печать(p.stdout.read(). декодирование (‘ansi’))