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 スクリプトが推奨されます。

この init スクリプトは、実行中のサーバーと通信するためにかなり型にはまらないアプローチを使用します。サーバーはscreenセッションで開始され、すべてのコマンドは screen を介してサーバーコンソールに送信されます。

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 に答える