Буферизованная труба в баш - PullRequest
2 голосов
/ 12 декабря 2011

Я использую сервер Bukkit (Minecraft) на компьютере с Linux и хочу, чтобы сервер корректно отключился с помощью команды сервера 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 Ответ

2 голосов
/ 12 декабря 2011

Возможно, вы захотите взглянуть на Bukkit wiki , который рекомендует init script для постоянно работающих серверов.

Этот сценарий инициализации использует довольно нестандартный подход для связи с работающим сервером.Сервер запускается в сеансе screen , затем все команды отправляются через консоль сервера через экран, например,

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

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

Этот подход предполагает, что bukkit может ожидать, что стандартный ввод будет подключен к терминалу, поэтому для автоматической работы требуется экранная оболочка (которая сама является эмулятором терминала).

...