2

我在 Linux 机器上运行 Bukkit (Minecraft) 服务器,我希望使用服务器的命令正常关闭服务器,并使用命令行在stop特定时间挂起计算机。pm-suspend这是我所拥有的:

me@comp~/dir$ perl -e 'sleep [time]; print "stop\\n";' | ./server && sudo pm-suspend

(我已经编辑了,/etc/sudoers所以我暂停时不必输入密码。)

问题是,当它处于perl -e睡眠状态时,服务器期待一个恒定的字节流,(这是我的猜测。我可能误解了一些东西。)所以它打印出它收到的所有空内容,占用宝贵的资源:

me@comp~/dir$ ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...

有没有缓冲管道之类的东西?如果没有,有什么方法可以将延迟输入发送到脚本?

4

1 回答 1

2

你可能想看看Bukkit 的 wiki,它推荐了一个用于永久运行服务器的init 脚本。

此初始化脚本使用非常规的方法与正在运行的服务器进行通信。服务器在屏幕会话中启动,然后所有命令都通过屏幕发送到服务器控制台,例如

screen -p 0 -S $SCREEN -X eval 'stuff \"stop\"\015'

https://github.com/Ahtenus/minecraft-init/blob/master/minecraft

这种方法表明 bukkit 可能希望将标准输入附加到终端,因此需要屏幕包装器(它本身就是终端仿真器)以进行无人值守的运行。

于 2011-12-11T22:00:31.497 回答