bash中的缓冲管

时间:2011-12-11 21:32:30

标签: bash bukkit

我正在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$ ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...

有没有缓冲管这样的东西?如果没有,有没有办法将延迟输入发送到脚本?

1 个答案:

答案 0 :(得分:2)

您可能需要查看Bukkit's wiki,其中建议init script永久运行服务器。

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

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

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

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