2011-12-11 70 views
2

我正在Linux机器上运行Bukkit(我的世界)服务器,并且希望使用服务器的stop命令正常关闭服务器,并且计算机在某个时间使用pm-suspend从命令行暂停。下面是我得到了什么:bash中的缓冲管道

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

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

的事情是,当perl -e正在睡觉,服务器期待字节络绎不绝,(这是我的猜测我可能误解的东西。),所以它打印出所有收到,占用宝贵的资源,没有任何事情的:

[email protected]~/dir$ ... 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>... 

是否有这样的事情作为缓冲管道?如果没有,是否有任何方法将延迟输入发送到脚本?

+1

此行为可能是因为bukkit服务器期望将标准输入连接到终端。你的重定向打破了这个假设。 – user688996

回答

2

您可能想看看Bukkit's wiki,它建议永久运行服务器的init script

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

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

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

这种方法表明bukkit可能预期标准输入被连接到末端,因此需要屏幕包装物(其本身的终端仿真器),用于无人值守的运行。