我正在为我的朋友们运行Minecraft服务器,而我是从Raspberry Pi开始的。除了延迟(由于我的互联网,而不是硬件),服务器运行平稳,但是,我的Pi希望经常关闭(如果服务器控制台崩溃,或者屏幕决定关闭该会话等)。 。我想做的是创建一个每天在午夜和正午运行的python脚本,以通过服务器控制台和pi本身发出一些命令。
可以通过screen -r Minecraft
访问服务器控制台,因此我可以关闭SSH会话并使服务器保持运行状态。如果服务器未运行,则可以使用./minecraft.sh
启动它。
本质上是我想做的:(对不起,除了导航pi控制台所需的内容外,我对python的了解很少)(我对C#更加熟悉,所以很抱歉,如果我的代码更类似于该代码而不是类似代码)蟒蛇) 注意:发出到服务器控制台屏幕-r minecraft的命令不需要在非命令文本I.E周围加引号。说单词会将单词发送到游戏聊天,但说“单词”会将“单词”发送到游戏聊天。
//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在-r Minecraft屏幕下启动服务器,以便我稍后再访问)
编辑:拼写,C#解释,更好的代码。 编辑:Minecraft命令的描述符,添加了公告并保存了状态。
答案 0 :(得分:0)
我想以下示例可能会有所帮助:
import subprocess
import time
def infinite_stuff():
while True:
do_work()
time.sleep(60) # time in seconds, so event take place each 60 seconds
def do_work():
p = subprocess.Popen('cmd.exe', stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
cmds = []
cmds.append("cd C:\\Users\LOL\\Desktop\\ \n")
cmds.append("dir \n")
cmds.append("ping 127.0.0.1 \n")
cmds.append("ping 127.0.0.2 \n")
for cmd in cmds:
p.stdin.write(cmd.encode('utf-8'))
p.stdin.close()
print(p.stdout.read().decode('ansi'))
if __name__ == '__main__':
infinite_stuff()