LINUX.ORG.RU

Проблема со screen stdin/stdout

 , ,


0

1

Здравствуйте. Мне нужно запускать в бэкграунде процессы к которым позже можно вернуться и которые будут продолжать работать в фоне после того как я выйду из терминала PuTTy(pts/0). В сети нашёл способ с помощью команды screen. Мой вариант запуска выглядит так:

screen -d -m -S name websocat -t -u tcp-l:127.0.0.1:1234 reuse-raw:- | websocat wss://pubsub-edge.twitch.tv

Где левая часть команды до знака «|» запускает демона который слушает порт 1234 на моем компе и в случае когда на порт поступают данные то перенаправляет их в stdin другой программы (правая часть команды после знака «|») -S name - имя фоновой задачи -d укажет, что скрин нужно свернуть, а ключ -m - что его нужно для начала создать.

И все вроде бы работает, но проблема начинается когда я перенаправляю стандартный вывод stdout и ввод stdin. Когда я разворачиваю скрин websocat и смотрю что там происходит, при этом открываю второй терминал и конекчусь к порту 1234 (nc 127.0.0.1 1234) и ввожу туда данные, то в окне со screen’ом вижу эту информацию на экране, хотя по моей логике она должна перенаправляться в правую часть команды (| websocat wss://pubsub-edge.twitch.tv). Без утилиты screen все работает как надо, но вот при её попытке использования получаю не совсем тот результат который мне нужен. Как это можно исправить и какие есть ещё варианты запуска процессов в фоне с возможностью их продолжения работы после выхода из терминала и возможностью достать процесс из фона после того как заново подключусь к консоле?


screen -d -m -S name websocat -t -u tcp-l:127.0.0.1:1234 reuse-raw:- | websocat wss://pubsub-edge.twitch.tv

Тут же внутри screen запускается только первая команда. Видимо, кавычек не хватает:

screen -d -m -S name "websocat -t -u tcp-l:127.0.0.1:1234 reuse-raw:- | websocat wss://pubsub-edge.twitch.tv"
xaizek ★★★★★
()
Ответ на: комментарий от k0x

В принципе работает, если запихнуть все команды в file.sh и запускать его:

screen -d -m -S name ./111.sh

screen -ls

There is a screen on: 26851.name (Detached) 1 Socket in /root/.screen.

Но хотелось бы все таки понять, можно ли из консоли все это дело запустить?

k0x
() автор топика

Просто запусти screen.

Потом запусти нужную тебе команду со всеми нужными опциями и перенаправлениями.

Далее можешь отключиться от скрина: ^A d

Ну или просто закрыть терминал.

Вернуться к выполнению можно потом командой screen -R(просмотр доступных сессий screen - screen -ls).

shell-script ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.