Вопрос: Использование скрипта для управления процессом, уже запущенным на экране


Из-за того, что Gnu Screen был сложным для Google, у меня возникли проблемы с поиском ответа на этот вопрос.

Как конкретный (что вы пытаетесь сделать) пример:
Запуск серверного процесса (под Linux) запускает кучу вывода (STDOUT STDERR), который может принимать входные данные от STDIN.
Периодически я хочу выдать команду (/snapshot) для резервного копирования текущего состояния.
Я хочу настроить cron для запуска команды, которая изредка вводит это в STDIN для сервера.

До сих пор я думал, что серверный процесс может работать в сеансе отдельного экрана. И я думаю, что команда exec экрана может подключаться к разным сеансам терминала под экраном, а также передавать STDIN и STDOUT в другой процесс. Но, читая документы сбивает с толку. И это не помогает, что они говорят, что есть «запутанная иллюстрация», чтобы объяснить это дальше.

Если кто-то это сделал, как мне указать команду cron для этого. Пока я думаю (покажите, что вы сделали):

5 * * * * /usr/bin/screen -p 1 -X 'exec ! echo "/snapshot"'

Но здесь я не знаю, будет ли это работать, если это действительно будет нацелено на серверный процесс в окне 1, и что произойдет после этого; выходит экран?


0
2017-12-09 22:12


Источник


./~ Когда-нибудь мой ответчик придет ./~ - dlamblin


Ответы:


Я не думаю, что полностью понимаю ваш конкретный случай использования, но вот возможный подход, который может помочь.

Вместо того, чтобы сбрасывать процесс stdout а также stderr, они записаны в файл. В качестве альтернативы вы можете использовать tee для записи в файл и на терминал.

Также перенаправлять stdin с помощью tail -f на отдельный входной файл. Создайте задание cron, которое записывает новую строку во входной файл с соответствующим интервалом.

Вы все еще можете запустить свой процесс в screen если вы хотите периодически проверять его (или просто сохранить его в живых).

Начните свой процесс следующим образом:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 >/path/to/outputfile.txt

или, используя tee:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 | tee /path/to/outputfile.txt

И настройте входное задание cron следующим образом:

5 * * * * /bin/cat "/snapshot" >> /path/to/myinputfile.txt

1
2018-02-01 20:37



Благодаря; Мне нравится это решение. я думал screen может поддерживать что-то подобное, хотя; НАПРИМЕР. если я только хотел отправить символ или два без новой строки, tail -f будет проблемой. - dlamblin