Переход к предыдущей публикации 37 WAV звуков для оповещения о приходе новой почты ~/.forward - почему может не работать пользовательская переадресация почты Переход к следущей публикации

screen - оставляем процессы в фоне и идем спать (пример файла .screenrc)

Четверг, 6 марта, 2008 07:45:10 EET

Исправления от 23 марта, 2009 13:08:10

Screen Вспомнилась одна очень удобная и полезная программка для FreeBSD - screen называется. 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

Теперь отредактируем его. Вот мой вариант этого файла.


Эта часть публикации доступна только зарегистрированным посетителям!
Пожалуйста, войдите [Login] или зарегистрируйтесь [Register].

Сохраняем этот файл и запускаем 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 ? - она выведет справку по всем комбинациям клавиш. :cool:

Запускать можно сколько угодно скринов. Для того, чтобы вступить во взаимодействие со 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.

Вот такая полезная утилита. Пользуйтесь наздоровье! ;)

Похожие публикации

Комментариев 10

pilferst 12 марта, 2009 21:04:12 EET .:. ID #6372 .:.

Большое спасибо, реально помогло

VersuS 31 июля, 2008 09:02:25 EEST .:. ID #750 .:.

так в курсе кто-то чем отличаются то эти два способа?

Daemony 30 июля, 2008 11:33:22 EEST .:. ID #749 .:.

Хм… Уже увидел.

cd /usr/home/serj/bin/
screen -AmdS world /usr/home/serj/mangos.sh
screen -AmdS realm /usr/home/serj/realm.sh

Daemony 30 июля, 2008 11:32:25 EEST .:. ID #748 .:.

Шо то и я не догоню, как это относится к screen ? ;)

VersuS 30 июля, 2008 07:43:13 EEST .:. ID #747 .:.

упс.. я теги не те для кода использовал ))

VersuS 30 июля, 2008 07:42:09 EEST .:. ID #746 .:.

пипл, подскажите почему так:

почему скрипт

#!/bin/sh
while true ; do
echo `date` “, Realm daemon crashed and restarted.” >> /usr/home/serj/bin/realmcrash
/usr/home/serj/bin/mangos-realmd
done

если запустить просто из консоли он работает в цикле то есть постоянно запускает
/usr/home/serj/bin/mangos-realmd
и останавливается если нажать CTRL+C
но
из скрипта

cd /usr/home/serj/bin/
screen -AmdS world /usr/home/serj/mangos.sh
screen -AmdS realm /usr/home/serj/realm.sh

он ведет себя наоборот. запускается один раз, а

перезапускается

если его остановить сочетанием CTRL+C

в чем отличие этих методов запуска что скрипт себя ведет по разному ?
или что обзначает while true ; do
какой то параметр передается что ли?

и если не сложно как понимать

while :
do

тут немного другая структура..
парюсь парюсь и не догоню.

Daemony 23 марта, 2008 21:07:15 EET .:. ID #521 .:.

Как бы так чтобы попроще…

$ man nohup
NOHUP(1)              Справочник основных команд FreeBSD              NOHUP(1)

НАЗВАНИЕ
     nohup -- запустить утилиту с защитой от разрыва на линии

СИНТАКСИС
     nohup [--] утилита [аргументы]

ОПИСАНИЕ
     Утилита nohup запускает программу утилита с аргументами аргументы, уста-
     навливая при этом игнорирование сигнала SIGHUP.  Если стандартным выводом
     является терминал, то вывод будет дописываться в конец файла nohup.out в
     текущем каталоге.  Если дескриптор стандартного файла ошибок указывает на
     терминал, то он будет перенаправлен туда же, куда и стандартный вывод.

     Некоторые командные оболочки имеют встроенную команду nohup с похожей
     либо идентичной функциональностью.  Обратитесь к странице справочника
     builtin(1).

ОКРУЖЕНИЕ
     Команда nohup использует следующие переменные окружения:

     HOME  Если выходной файл nohup.out не может быть создан в текущем ката-
           логе, то nohup создаст его в каталоге, на который указывает пере-
           менная HOME.

     PATH  Эта переменная используется для определения местонахождения испол-
           няемого файла программы утилита, если путь к ней был задан неявно
           (не содержит символов `/').

СТАТУС ЗАВЕРШЕНИЯ
     Утилита nohup возвращает одно из следующих значений кода завершения:

     126     Программа утилита была найдена, однако её не удалось запустить.

     127     Программа утилита не была найдена, либо произошла ошибка в nohup.

     Во всех остальных случаях nohup возвращает код завершения утилиты
     утилита.

СМОТРИ ТАКЖЕ
     builtin(1), csh(1), signal(3)

СТАНДАРТЫ
     Предполагается, что утилита nohup совместима со стандартом IEEE Std
     1003.2 (``POSIX.2'').

ПРОБЛЕМЫ
     Две или более одновременно запущенных команды nohup могут начать запись в
     один и тот же файл, что приведёт к смешиванию выходных данных.

FreeBSD 6.0                      19 июля 2001                      FreeBSD 6.0

У screen’ов может быть гораздо шире применение… ;)

psihoz 22 марта, 2008 20:30:28 EET .:. ID #519 .:.

такой чайниковский вопрос, а nohup команда & может послужить альтернативой screen в процессе, к примеру, долгой установки/компиляции чего либо? чтобы было возможно отключиться от терминала а процесс оставался работать

Daemony 8 марта, 2008 08:04:37 EET .:. ID #442 .:.

bg и screen - две принципиально разные вещи. ;)

Brim 7 марта, 2008 22:11:28 EET .:. ID #441 .:.

А как насчет родного “bg”? :)

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)