«Вставить» команды в работающий процесс - PullRequest
2 голосов
/ 09 мая 2011

Я создал Perl-скрипт для запуска игрового сервера Java, java -jar somejar.jar > /dev/null 2>&1 &

Он запускается и работает нормально, но я хотел бы иметь возможность «вводить» команды в консоль работающего сервера (для остановки перезапуска и т. Д.), Поскольку опасно останавливать его, прерывая его через killall или ^ C.

При нормальной работе сервер отображает журнал действий пользователя и область для ввода команд, где я хотел бы «вставить» текст.

Возможно ли это?

Спасибо! Джастин

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

Не будет разумно сделать это без настройки Java-приложения. Измените ваше приложение так, чтобы оно могло читать команды как с консоли ввода, так и , а также из сокета. Создайте сокет сервера, прослушивающий входящие соединения, прочитайте данные и интерпретируйте их как команду. Из сценария Perl или любого другого места, где вы хотите выполнить команду, подключитесь к порту прослушивания сокета сервера и запишите строку команды в сокет.

Вы даже можете создать чистую абстракцию, которая будет независима от «источника команд».

Обратите внимание, что является ограниченным API, который позволяет вам перехватывать и интерпретировать сигналы POSIX, но он скрыт и, вероятно, его не следует использовать.

0 голосов
/ 09 мая 2011

Как обсуждалось в этого вопроса , привязка stdin к FIFO не будет работать, потому что ваш серверный процесс будет видеть отдельный EOF после каждой передачи новых команд в FIFO.Я предполагаю, что самым простым решением было бы запустить сервер на Screen .Лучшее, но более техническое решение состоит в том, чтобы модифицировать сервер для приема команд, например, через сокет.

...