Я использую Экран как это:
screen -L -dm -S session1 -c "./game_server -options"
чтобы обернуть вокруг игровых серверов. Я записываю их вывод в файл и могу отправить им ввод с помощью:
screen -r session1 -p0 -X "stuff \"this into input^M\""
Таймаут между сбросами файла журнала можно указать в файле конфигурации (в моем случае 10 секунд).
У меня проблема в том, что я не могу заставить screen сбрасывать вывод в файл журнала. Например, после того, как я отправляю команду «status» на игровой сервер, игровой сервер печатает некоторую информацию, но для добавления ее в файл журнала требуется не менее 10 секунд.
Я пробовал отправить:
screen -r session1 -p0 -X "logfile flush 1"
Но он на это не реагирует. Я также пробовал промыть 0 без везения.
Я бы не хотел всегда регистрироваться с таймаутом в 1 секунду; это действительно необходимо только после получения команды. Обратите внимание, что я параноик в отношении производительности, потому что в сеансе все-таки запущен игровой сервер.
Как заставить screen сбрасывать вывод в файл журнала? Есть ли способ делать то, что мне нужно (вывод журнала в файл и отправлять команды на ввод), кроме экрана, возможно, с помощью FIFO?
Попробуй это:
screen -r session1 -X colon "logfile flush 1^M"
logfile flush 1
на самом деле это не экранная команда, но colon
является. Следующее, что вы передаете, - это аргумент, который должен быть заключен в кавычки, а ^ M в конце фактически должен быть Ctrl-M. Ctrl-V, за которым следует Ctrl-M, обычно делает трюк для ввода фактического Ctrl-M.
У меня были те же потребности, что и у вас. Logfile flush
- допустимая команда для отправки на экран, однако ее не нужно заключать в кавычки, и вы также можете установить для нее значение 0 для мгновенной очистки.
Измените свою строку на
screen -r session1 -p0 -X logfile flush 0
Не забудьте вернуть его обратно, когда закончите чтение из файла журнала.
screen -r session1 -p0 -X logfile flush 10
По умолчанию это 10 секунд, но вы можете установить любое значение, которое считаете нужным.