2016-04-22 5 views
0

Я запускаю сеансы экрана в Unix. После открытия и запуска нескольких сеансов экрана я хотел бы проверить ход каждого сеанса экрана, чтобы узнать, завершен ли какой-либо сеанс.Как проверить ход сеанса экрана без повторного подключения к сеансу?

В командной строке, если я типа:

$screen -ls 

я мог видеть список отдельных экранных сессий, например,

There are screens on: 
    4683.pts-0.xxxx (Detached) 
    4869.pts-0.xxxx (Detached) 
    4848.pts-0.xxxx (Detached) 
    4890.pts-0.xxxx (Detached) 
4 Sockets in /var/run/screen/S-xyzxyz. 

Если я хочу, чтобы проверить, если любой из 4-х сеансов завершения работы, я мог бы прикрепить одну сессию, чтобы проверить прогресс:

$screen -r 4683.pts-0.xxxx 

Тогда я мог бы видеть, если эта сессия завершит работу.

Однако есть ли способ проверить ход всех сеансов экрана без повторного подключения к каждой сессии?

+0

Как вы определяете "заканчивается бег"? Я предполагаю, что вы запускаете скрипт в каждом сеансе экрана. У вас может быть сценарий (или сценарий, который запускается после него), выход из экрана или запись в файл журнала? Или вы можете проверить PID скрипта, который вы используете в сеансе экрана. – Matthew

+0

Не могли бы вы начать каждый сеанс экрана с помощью аргумента '-L' и grep через журналы для слова или фразы? [https://www.gnu.org/software/screen/manual/screen.html](https://www.gnu.org/software/screen/manual/screen.html) – runningviolent

ответ

1

(Так как вы помечено вопрос с «tmux», я буду считать, что вы все в порядке с ответом, который использует Tmux вместо экрана.)

Tmux имеет концепцию мониторинга деятельности : если в окне произойдет какое-либо изменение, пользователь будет уведомлен. «Активность» - это любое визуальное изменение окна, будь то распечатка или просто завершение программы (и возврат в оболочку, который, в свою очередь, распечатает свое приглашение и, таким образом, активирует мониторинг активности.) Если ваши процессы уже ведут себя так, вы может пропустить шаг 2 в списке ниже, а также упростить шаг 4.

Если у вас есть процессы, которые выводят много материала, и вы не хотите перенаправлять этот вывод в файл, вам придётся прибегнуть к мониторинг молчания. В этом режиме Tmux будет следить за окнами, где в течение последних N секунд не было выхода. Я рекомендую этот подход, поскольку он требует больше работы, чем мониторинг активности.

Так вот что вы можете сделать:

  1. Включить мониторинг активности для всех окон, помещая следующее в .tmux.conf:

    set-window-option -g monitor-activity on 
    

    Это должно покрыть большую часть usecases.

  2. Если вы хотите следить за неактивностью, вам нужно будет установить monitor-silence для каждого окна. Вы можете установить его по всему миру, но я не думаю, что вам посчастливится иметь один тайм-аут, который подойдет всем; Таким образом, здесь я представляю команду, которая должна выполняться в каждом окне отдельно (с помощью прижимного префиксом, который Ctrl - по умолчанию, а затем ввести его):

    set-window-option monitor-silence N 
    

    N здесь число секунды, после которого Tmux должен считать окно тихим.

  3. Теперь вы можете начать все свои процессы и отсоединиться от сеансов.

    Примечание: мониторинг активности и молчания уведомляет вас только о тех окнах, на которые вы не смотрите; поэтому вам следует отключиться от всех сеансов, если вы хотите, чтобы отчет, который мы создадим на следующем шаге, будет завершен.

  4. Наконец, вы можете выполнить следующую команду, чтобы выяснить, какие сессии деятельности или молчание уведомление:

    tmux list-windows -a \ 
        -F "#{window_activity_flag}#{window_silence_flag} #S:#W" \ 
    | egrep '^(10|01)' 
    

    Что здесь происходит?

    1. tmux list-windows списки окон, очевидно;
    2. -a означает «перечислить все окна всех сеансов»;
    3. -F определяет формат вывода. Здесь мы выводим два флага (которые могут быть либо 0, либо 1), а затем пробел, а затем имена сеанса и окна, разделенные двоеточием;
    4. окончательно, мы grep для строк, где window_activity_flag или window_silence_flag равно 1, то есть для окон, для которых отчеты об активности или молчании Tmux. (Вы также можете настроить оба монитора активности и молчания, а затем grep для комбинации 11, но это делает установку еще более хрупкой, поэтому я оставляю это как упражнение для читателя :)
    5. Обратные косые черты предназначены только для форматирования - они избегают новых линий. Вы можете опустить их и использовать весь этот код как oneliner.

    Результат выглядит следующим образом:

    10 project:vim 
    10 project:zsh 
    10 rfcs:WebDAV 
    10 rfcs:WebDAV requirements 
    10 rfcs:Versioning WebDAV 
    01 test:zsh 
    

    Первые пять окон уведомления активность, последний имеет уведомление молчание.

+0

Большое спасибо! Это очень полезно. – user118464