13 апреля 2018

Как работать с Linux Screen

Linux Screen позволяет вам:

  • Создавать множественные окна в терминале SSH;
  • Сохранять сессию активной даже при сетевых отключениях;
  • Отключаться и переподключаться к сессии из разных мест;
  • Выполнять длительный процесс, не поддерживая активную сессию.

Установка Screen с Yum

Наверняка, у вас уже есть Linux Screen в вашей системе. В большинстве дистрибутивов Red Hat и CentOS вы можете найти Screen Linux в /usr/bin/ screen . Чтобы увидеть, находится ли там Screen , вы можете использовать следующую команду:

Если у вас нет Screen, то можете установить его из RPM или файла пакета для вашей системы. Например, на CentOS можно установить Screen с yum:

Поскольку вы, скорее всего, уже имеете Screen или можете использовать RPM, я не буду описывать установку Screen из ресурса. А расскажу, как использовать screen.

Запуск Screen Linux

Screen запускается с командной строки точно так же, как любая другая команда :

Теперь вы в окне в Screen. Оно функционирует точно так же, как нормальная оболочка за исключением нескольких специальных символов.

Команда управления

Команда : «Ctrl-a»
Screen использует команду «Ctrl-a» , это — клавиша «CTRL» и нижний регистр «a» работает как сигнал отправить команды Screen’у вместо оболочки. Например, «Ctrl-a» потом «?». У Вас должна появится страница справки Screen.

Привязка клавиш — это команды , которые принимает Screen после того, как нажаты “Ctrl-a”. Вы можете переназначить эти ключи по своему усмотрению, используя .screenrc файл, но я использую значения по умолчанию. 

Создание окон

Команда: «Ctrl-a» «c». Чтобы создать новое окно используйте «Ctrl-a» «c».

Такая комбинация, с настройками по умолчанию создаст новое окно. Ваше старое окно будет все еще активно.
Например, я могу выполнить top и затем открыть новое окно, чтобы заняться чем-то другим. Top остается рабочей! Чтобы попробовать, запустите screen, а затем выполните top. (Примечание: некоторые скрины у меня урезаны, чтобы оставить свободное место.)

Запустите…

Теперь откройте новое окно с: «Ctrl-a» «c»

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

Переключение между окнами

Команда : «Ctrl-a» «n»

Screen позволяет перемещаться вперед и назад. Вы можете использовать «Ctrl-a» «n», чтобы вернуться обратно. Эта команда переключает на следующее окно.

Работает как карусель — циклично выполнится назад по кругу к Вашему первому окну. Вы можете создать несколько окон и переключателя по ним «Ctrl-a» «n» для следующего окна или «Ctrl-a» «p» для предыдущего окна. Каждый процесс продолжит работать, пока вы не закроете окно. 

Отсоединение от Screen

Команда: «Ctrl-a» «d»

Экран позволяет отсоединяться от окна и вернуться к нему позже. Если сетевая связь прервется, то Screen автоматически отсоединит сеанс!

Можете отсоединиться, используя «Ctrl-a» «d».

Все окна Screen все еще там, и вы можете повторно присоединиться к ним. Это удобно при использовании rsync для миграции сервера.

Повторное присоединение к Screen

Если Ваше соединение оборвалось или Вы отсоединились от Screen’а, Вы можете повторно подключиться, просто запуская:

Произойдёт повторное подключение к Вашему Screen. Однако, если у Вас есть несколько Screen’ов,то может получится это:

Если так, просто определите Screen, который хотите.

Регистрация действий Screen

Я считаю важным фиксировать то, что я делаю на чьем-либо сервере. К счастью, Screen это упрощает.
Используя «Ctrl-a» «H», запускается регистрация сеанса. Screen продолжит добавлять данные к файлу через многократные сеансы. Использовать функцию регистрации очень полезно для отслеживания того, что вы делали, особенно если требуется вносить много изменений. Если что-то пойдёт не так, всегда будет возможность найти ошибку.

Получение уведомлений

Screen может контролировать окно, его активность или бездействие. Данная функция необходима, если загружаете большие файлы, делаете компиляцию или ожидаете вывода.

Если Вы ожидаете ответа от «долгой» программы, можете использовать «Ctrl-a» «M», чтобы отследить активность. Screen высветит предупреждение внизу страницы, когда отклик будет зарегистрирован на том экране.
Я использую это при выполнении команды, которая занимает много времени. Могу просто запустить команду, переключиться на другое окно и не возвращаться обратно каждый раз, чтобы проверить состояние.

Если загружаете большой файл или компилируете программу, по завершению придёт уведомление. Это – будет сигналом того, что задание выполнено. Чтобы контролировать такие моменты без вывода экрана я используют «Ctrl-A» «_».

Блокировка сеанса Screen

Если Вам необходимо отойти от Вашего компьютера на несколько минут, Вы можете заблокировать свой сеанс, используя «Ctrl-a» «x». Для доступа к сеансу снова потребуется пароль.

Screen used by root <jeffh>.
Password:

Остановка Screen

Когда вы закончили работу, я бы порекомендовал закончить сеанс вместо того, чтобы оставить его на потом. Чтобы остановить Screen, можете, как обычно, просто ввести «Exit» из своей оболочки. Это закроет Screen. Чтобы завершить сеанс вы должны закрыть все окна.

Как только вы закрываете все окна выводится сообщение о том, что Screen начал завершение.

[screen is terminating]

Альтернативно, Вы можете использовать «Ctrl-a» «k».

30 марта 2018

Базовые DNS-записи для почтового сервера

Для меня загадка почему развертывание даже примитивной конфигурации почтового сервера для многих системных администраторов является столь серьезной проблемой. Тем не менее, это так. Мне бы никогда не пришло в голову писать об этом целую статью, но судя по неиссякаемому количеству вопросов, это сделать все же необходимо. Больше всего сложностей вызывают базовые DNS-записи для почтового сервера, о них и поговорим.

Читать далее
30 марта 2018

Systemd: Создание Сервиса — Примеры

Большинство дистрибутивов Linux в качестве менеджера системы и сервисов используют systemd.

systemctl является основной командой для управления сервисами в systemd.

В данной статье я покажу, как создать service-файл в systemd, который позволит управлять вашим сервисом с помощью команды systemctl, как без перезагрузки перезапустить systemd, чтобы он перечитал unit-файлы и как активировать ваш новый сервис.

Также я приведу описание наиболее важных опций используемых в service-файлах с примерами реальных service-файлов.

Создание Сервиса в Systemd

Создайте service-файл /etc/systemd/system/foo-daemon.service (замените foo-daemon на имя вашего сервиса):

Откройте файл foo-daemon.service и пропишите минимальные настройки, которые позволят управлять сервисом с помощью systemctl:

Путь К Демону: Если вы не знаете путь к демону, попробуйте which foo-daemon.

После создания нового service-файла необходимо перезапустить systemd:

Теперь вы можете делать start, stop, restart и проверять status сервиса:

Чтобы добавить сервис в автозагрузку, необходимо активировать его:

Чтобы проверить логи сервиса, выполните:

Опции Service-файла в Systemd

Service-файла в systemd обычно состоит из трех секций.

Общие элементы конфигурации сервиса настраиваются в секциях [Unit] и [Install]

Параметры конфигурации конкретного сервиса настраиваются в секции [Service].

Важные Опции Секции [Unit]

Опция Описание
Description Краткое описание юнита.
Documentation Список ссылок на документацию.
Before, After Порядок запуска юнитов.
Requires Если этот сервис активируется, перечисленные здесь юниты тоже будут активированы. Если один из перечисленных юнитов останавливается или падает, этот сервис тоже будет остановлен.
Wants Устанавливает более слабые зависимости, чем Requires. Если один из перечисленных юнитов не может успешно запуститься, это не повлияет на запуск данного сервиса. Это рекомендуемый способ установления зависимостей.
Conflicts Если установлено что данный сервис конфликтует с другим юнитом, то запуск последнего остановит этот сервис и наоборот.

Список всех опций секции [Unit]:

Важные Опции Секции [Install]

Опция Описание
Alias Дополнительные имена сервиса разделенные пробелами. Большинство команд в systemctl, за исключением systemctl enable, могут использовать альтернативные имена сервисов.
RequiredBy, WantedBy Данный сервис будет запущен при запуске перечисленных сервисов. Для более подробной информации смотрите описание опций Wants и Requires в секции [Unit].
Also Определяет список юнитов, которые также будут активированы или дезактивированы вместе с данным сервисом при выполнении команд systemctl enable или systemctl disable.

Список всех опций секции [Install]:

Важные Опции Секции [Service]

Опция Описание
Type Настраивает тип запуска процесса. Один из:
simple (по умолчанию) — запускает сервис мгновенно. Предполагается, что основной процесс сервиса задан в ExecStart.
forking — считает сервис запущенным после того, как родительский процесс создает процесс-потомка, а сам завершится.
oneshot — аналогичен типу simple, но предполагается, что процесс должен завершиться до того, как systemd начнет отслеживать состояния юнитов (удобно для скриптов, которые выполняют разовую работу и завершаются). Возможно вы также захотите использовать RemainAfterExit=yes, чтобы systemd продолжал считать сервис активным и после завершения процесса.
dbus — аналогичен типу simple, но считает сервис запущенным после того, как основной процесс получает имя на шине D-Bus.
notify — аналогичен типу simple, но считает сервис запущенным после того, как он отправляет systemd специальный сигнал.
idle — аналогичен типу simple, но фактический запуск исполняемого файла сервиса откладывается, пока не будут выполнены все задачи.
ExecStart Команды вместе с аргументами, которые будут выполнены при старте сервиса. Опция Type=oneshot позволяет указывать несколько команд, которые будут выполняться последовательно. Опции ExecStartPre и ExecStartPost могут задавать дополнительные команды, которые будут выполнены до или после ExecStart.
ExecStop Команды, которые будут выполнены для остановки сервиса запущенного с помощью ExecStart.
ExecReload Команды, которые будут выполнены чтобы сообщить сервису о необходимости перечитать конфигурационные файлы.
Restart Если эта опция активирована, сервис будет перезапущен если процесс прекращен или достигнут timeout, за исключением случая нормальной остановки сервиса с помощью команды systemctl stop
RemainAfterExit Если установлена в значение True, сервис будет считаться запущенным даже если сам процесс завершен. Полезен с Type=oneshot. Значение по умолчанию False.

Список всех опций секции [Service]:

Примеры Service-файлов в Systemd

Больше примеров в документации по systemd.service и systemd.unit.

3 сентября 2017

Postfix: диагностируем и устраняем неисправности

Postfix прост и надежен в эксплуатации, словно автомат Калашникова. Но все же неискоренимое человеческое любопытство нет-нет, да и заставляет нас задумываться над вопросами: Что будет, если в один прекрасный день Postfix перестанет работать? Смогу ли я понять, почему это произошло? Удастся ли мне его починить?

Начинаем диагностику

Итак, представим, что неприятности все же случились. Произошло это по вине неловкого администратора или аппаратного сбоя – неважно, наша задача – найти неполадки и исправить их. Каменщики обычно пляшут от печки, а мы начнем диагностику с проверки, запущен ли главный процесс Postfix. Сделать это проще всего командой:

Читать далее
7 июля 2017

Лог файлы Linux по порядку

Невозможно представить себе пользователя и администратора сервера, или даже рабочей станции на основе Linux, который никогда не читал лог файлы. Операционная система и работающие приложения постоянно создают различные типы сообщений, которые регистрируются в различных файлах журналов. Умение определить нужный файл журнала и что искать в нем поможет существенно сэкономить время и быстрее устранить ошибку.

Журналирование является основным источником информации о работе системы и ее ошибках. В этом кратком руководстве рассмотрим основные аспекты журналирования операционной системы, структуру каталогов, программы для чтения и обзора логов.

Читать далее
29 июня 2017

Bash-скрипты: регулярные выражения

Для того, чтобы полноценно обрабатывать тексты в bash-скриптах с помощью sed и awk, просто необходимо разобраться с регулярными выражениями. Реализации этого полезнейшего инструмента можно найти буквально повсюду, и хотя устроены все регулярные выражения схожим образом, основаны на одних и тех же идеях, в разных средах работа с ними имеет определённые особенности. Тут мы поговорим о регулярных выражениях, которые подходят для использования в сценариях командной строки Linux.

Читать далее
21 июня 2017

Магия SSH

С SSH многие знакомы давно, но, как и я, не все подозревают о том, какие возможности таятся за этими магическими тремя буквами. Хотел бы поделиться своим небольшим опытом использования SSH для решения различных административных задач.

1) Local TCP forwarding

Начнем с простого — local TCP forwarding:

Читать далее
29 мая 2017

Bash-скрипты: язык обработки данных awk

Иногда нужен более совершенный инструмент для обработки данных, нечто вроде языка программирования. Собственно говоря, такой инструмент — awk.

Утилита awk, или точнее GNU awk, в сравнении с sed, выводит обработку потоков данных на более высокий уровень. Благодаря awk в нашем распоряжении оказывается язык программирования, а не довольно скромный набор команд, отдаваемых редактору. С помощью языка программирования awk можно выполнять следующие действия:

Читать далее
27 мая 2017

Bash-скрипты: циклы

В этом материале продолжим рассказ о bash-скриптах, поговорим об управляющих конструкциях, которые позволяют выполнять повторяющиеся действия. Речь идёт о циклах  for и  while, о методах работы с ними и о практических примерах их применения.

Читать далее