我正在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$ ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...
有没有缓冲管这样的东西?如果没有,有没有办法将延迟输入发送到脚本?
答案 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可能期望将标准输入附加到终端,因此需要屏幕包装器(它本身就是终端仿真器)进行无人值守运行。