Вспомнилась одна очень удобная и полезная программка для FreeBSD - называется. Screen - это полноценный консольный оконный менеджер, объединяющий физический терминал c (возможно) несколькими интерактивными, виртуальными шеллами, которые могут открепляться от физического терминала и продолжать "жить своей жизнью". Каждый виртуальный терминал предоставляет использование возможностей терминала DEC VT100 по стандартам ISO2022 (такие как вставка/удаление строки и поддержка различных кодировок). Также поддерживается сколлинг буфера для просмотра истории команд и механизм "копировать-вставить", что позволяет перемещать фрагменты текста между отдельными окнами.
Screen'ы удобны тем, что в них можно оставить любые запущенные процессы и уйти, закрыв физический терминал (если Вы ходите на сервер с помощью putty, например), а позднее, войдя в систему вновь, можно подключиться к висящему в фоне скрину и продолжить в нем работу. Скрины не раз выручали меня когда приходилось запускать на сервере процессы компиляции чего-либо надолго. Компьютер (рабочая станция) не может работать круглые сутки. К тому же, запуская что-то из дому, требуется потом проверить с работы как обстоят дела. Последний раз я вспомнил о screen, когда после обновления FreeBSD до 7.0 запускал обновление пакетов (--all). Процесс длился почти пару десятков часов, а сидеть возле монитора постоянно я, понятное дело, не мог... Да что там говорить. Это просто надо попробовать. В screen'е даже ту же самую аську можно запустить в фоне и свалить с машины. Рекомендую: Screen == Must Have!
Установить утилиту screen можно из портов FreeBSD. Компиляция + установка проста и занимает всего 30 секунд (сама программка довольно маленькая; пакет с исходниками весит всего 820 килобайт).
root# cd /usr/ports/ root# make search name="screen" ... Port: screen-4.0.3 Path: /usr/ports/sysutils/screen Info: A multi-screen window manager Maint: cy@FreeBSD.org B-deps: R-deps: WWW: http://www.gnu.org/software/screen/ ... # cd /usr/ports/sysutils/screen # make install clean
Осталось теперь совсем немного. Подогнать под себя файл настроек и... привыкнуть к необычным "быстрым клавишам". Их много, но на практике я использую совсем чуть-чуть.
Стандартный файл с настройками появится после установки в каталоге /usr/local/etc/. Называется он screenrc и его, для внесения изменений, лучше скопировать в домашний каталог пользователя.
root# cp /usr/local/etc/screenrc ~/.screenrc
Теперь отредактируем его. Вот мой вариант этого файла.
################################################################# # Screen[rc] configuration file by Daemony ### # --- Основное --- # Отключаем приветственное сообщение startup_message off # Можно включить (или выключить - off) # визуальный биппер. vbell on # И то, что он будет писать в строке статуса vbell_msg " Din! - Don! " # "Красивые" подписи nethack on # Сколько строчек истории хранить в буфере defscrollback 2000 # # Таймаут сообщений в секундах msgwait 1 # --- Настройки строки состояния --- # # Строка состояния в screen или же по другому hardstatus # определяется несколькими параметрами, идущими в одну строку. # hardstatus alwayslastline "%{=b}%{g} Term: %{b}%w %=%{kG}%C%A %D %Y-%m-%d" # здесь (я беру параметры в одинарные кавычки): # '%{=b}' - путем эксперимента удалось выяснить, что оно делает # черным цвет фона строки. %) # '%{g} Term: ' - задает вывести слово ' Term: ' зелеными # буквами (пробелы тоже считаются - ими можно делать отступы) # '%{b}%w' - выводит список запущенных оболочек голубым цветом # '%=' - все, что идет после этого выравнивается по правому краю # '%{kG}%C%A' - показывает время в двенадцатичасовом формате. # '%D, %Y-%m-%d' - показывает дату: 'чт 2008-03-06' # --- Привязки специальных клавиш --- # - отделить сессию от текущего терминала bindkey -k k7 detach # - уничтожить текущую сессию bindkey -k k8 kill # - создать новое окно bindkey -k k9 screen # - переименовать текущее окно bindkey -k k; title # bind F11 вернуться к предыдущему окну bindkey -k F1 prev # bind F12 перейти к следущему окну. bindkey -k F2 next # --- Настройки для различных терминалов --- # Взяты из дефолтового конфига /usr/local/etc/screenrc За пояснениями - в ман.termcap facit|vt100|xterm LP:G0 terminfo facit|vt100|xterm LP:G0 termcap facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%d;%dr:ic@ terminfo facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%p1%d;%p2%dr:ic@ termcap sun 'up=^K:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:IC=\E[%d@:WS=1000\E[8;%d;%dt' terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC:IC=\E[%p1%d@:WS=\E[8;%p1%d;%p2%dt$<1000>' termcap xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l termcap vt100 dl=5\E[M terminfo vt100 dl=5\E[M termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' termcap hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' terminfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' termcap wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h terminfo wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h # Удаляем некоторые ненужные или небезопасные комбинации bind k bind ^k bind . bind ^\ bind \\ bind ^h bind h # И еще пару строк, взятых с какого-то буржуйского сайта... # - следущий показывает текущую активность activity 'Activity on screen %n ^G' # - а этим можно заменить строку hardstatus caption always "%{+b bk}%H%{gk} | %c %{ck}%d.%m.%Y | %{gk} %?%-Lw%?%{gw}%n*%f %t%?(%u)%?%{gk}%?%+Lw%? | %{ck} Load: %l %{wk}" #################################################################
Сохраняем этот файл и запускаем screen.
daemony$ screen
Запустится терминал номер ноль. Теперь в Вашем распоряжении два режима. Сразу после входа в скрины будет доступен режим оболочки, в котором можно работать с консолью как и обычно. Для того, чтобы послать программе screen какую-либо команду следует нажать Crtl-A и сказать, например: Crtl-C - для создания новой оболочки; Ctrl и цифру с номером консоли (если запущено несколько виртуальных консолей) для перехода на эту консоль; Crtl-D - для того, чтобы открепиться от скрина и вернуться в физический терминал и так далее. Назначив в конфиге "быстрые клавиши", можно использовать и их. Это наиболее распространенные комбинации (что пришли в голову), а вот еще (те что в мане накопал):
- Crtl и " - показать список активных окон и перейти к нужному;
- Crtl-A дважды - перейти к предыдудщему окну;
- Crtl-A a - послать окну эскейп последовательность Crtl-A;
- Crtl-A A - переименовать текущее окно, задать свое название;
- Crtl-A Crtl-B - послать в окно Break;
- Crtl-A C - очистить текущее окно;
- Crtl-A h - создать копию (что-то вроде ПринтСкрин) текущего окна в файл hardcopy.n, где n - номер текущего окна;
- Crtl-A Crtl-I - показать информацию о текущем окне;
- Crtl-A Crtl-K - уничтожить текущее окно;
- Crtl-A Crtl-M - показать последнее сообщение в строке статуса;
- Crtl-A Crtl-N - переключиться на следущее окно;
- Crtl-A backspace или Crtl-A Crtl-P или Crtl-A p или Crtl-A h - переключиться на предыдущее окно;
- Crtl-A S - разделить текущее окно на две части;
- Crtl-A Crtl-X - блокировка текущего экрана под пароль пользователя, что ее запустил;
- И самая полезная, на мой взгляд, комбинация - Crtl-A ? - она выведет справку по всем комбинациям клавиш.
Запускать можно сколько угодно скринов. Для того, чтобы вступить во взаимодействие со screen, висящему в фоне, следует набрать
daemony$ screen -rd
Если запущено несколько скринов, то Вы увидите предупреждение:
daemony$ screen -rd
There are several suitable screens on:
43929.ttyp6.hostname (Detached)
47381.ttyp5.hostname (Detached)
48024.ttyp5.hostname (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
В этом случае следует указать идентификатор скрина - он кстати совпадает с id запущенного процесса screen в системе.
daemony$ screen -rd 43929
Естественно, обычные пользователи, не могут войти в чужой скрин. Ну, а root может все.
Screen'ы могут висеть в системе годами. До первой перезагрузки сервера. Если произошла перезагрузка и в этот момент висели активные скрины, то после ребута их, само собой, не останется. Но останутся их "трупы", о чем Вам сообщит программа:
daemony$ screen -rd
There are screens on:
48273.ttyp5.hostname (Dead ???)
47381.ttyp5.hostname (Dead ???)
48024.ttyp5.hostname (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be detached.
Мол, простите, но нет открепленных скринов. Хотя есть убиенные с такими-то идентификаторами. Лежат они себе на "кладбище" в /tmp/screens/S-USERNAME и почистить их можно так:
daemony$ screen -wipe 48273 47381 48024
There is a screen on:
48273.ttyp5.hostname (Removed)
47381.ttyp5.hostname (Removed)
48024.ttyp5.hostname (Removed)
3 socket wiped out.
No Sockets found in /tmp/screens/S-daemony.
Вот такая полезная утилита. Пользуйтесь наздоровье!










Понедельник, 26 июля, 2010 в 19:20:24
как быть если процесс уже запущен без nohup и на момент запуска screen не установлен ?