screen - оставляем процессы в фоне и идем спать (пример файла .screenrc)
Вспомнилась одна очень удобная и полезная программка для 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
Теперь отредактируем его. Вот мой вариант этого файла.
Эта часть публикации доступна только зарегистрированным посетителям!
Пожалуйста, войдите [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 ? - она выведет справку по всем комбинациям клавиш.
Запускать можно сколько угодно скринов. Для того, чтобы вступить во взаимодействие со 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.
Вот такая полезная утилита. Пользуйтесь наздоровье!
Похожие публикации
Теги: .screenrc, FreeBSD, screen, unix, конфиг, пример конфигурации, программы для unix, утилиты


Большое спасибо, реально помогло
так в курсе кто-то чем отличаются то эти два способа?
Хм… Уже увидел.
Шо то и я не догоню, как это относится к screen ?
упс.. я теги не те для кода использовал ))
пипл, подскажите почему так:
почему скрипт
если запустить просто из консоли он работает в цикле то есть постоянно запускает
/usr/home/serj/bin/mangos-realmd
и останавливается если нажать CTRL+C
но
из скрипта
он ведет себя наоборот. запускается один раз, а
если его остановить сочетанием CTRL+C
в чем отличие этих методов запуска что скрипт себя ведет по разному ?
или что обзначает while true ; do
какой то параметр передается что ли?
и если не сложно как понимать
тут немного другая структура..
парюсь парюсь и не догоню.
Как бы так чтобы попроще…
$ 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’ов может быть гораздо шире применение…
такой чайниковский вопрос, а nohup команда & может послужить альтернативой screen в процессе, к примеру, долгой установки/компиляции чего либо? чтобы было возможно отключиться от терминала а процесс оставался работать
bg и screen - две принципиально разные вещи.
А как насчет родного “bg”?