- /4te.me
- Управление службами Systemd. Часть 1 из 3
- Управление сервисами
- Запуск и остановка сервиса
- Перезапуск и перезагрузка
- Включение и отключение сервисов
- Проверка состояния сервиса
- Обзор состояния системы
- Просмотр списка текущих юнитов
- Список юнит-файлов
- Systemctl-управление службами в Linux
- Введение
- Основы управления сервисами (юнитами)
- Включение и отключение сервисов
- Получение данных о состоянии системы
- Файлы юнитов и зависимости
- Изменение файлов юнитов
- Использование целей
- Выключение и перезагрузка сервера
- Заключение
- Управление сервисами в Linux. Команда systemctl
- Что такое сервисы в Linux
- Список сервисов
- Запуск сервиса
- Останов сервиса
- Перезапуск сервиса
- Автозагрузка сервисов
- Статус сервиса
- Заключение
/4te.me
Здесь покажу как писать инитники для автозапуска какого-либо демона в системе с systemd.
Systemd оперирует unit-файлами в качестве конфигурационных файлов. Это как .conf-файл для upstart или init-скрипты для initd. Unit-файлы также могут описывать и другие системные сущности, но в данном случае они нас интересуют как конфиг для автостарта сервиса. В Ubuntu 16.04 они лежат в /etc/systemd/ . Напишем свой unit-файл.
Допустим у нас есть программа, которую мы хотим запускать как демон. Вот здесь я писал как создать telegram-бота. У меня получился исполняемый файл, который запускается и висит ждет сообщений. Теперь хочу чтобы он как демон стартовал при загрузке системы.
Создаем такой файл:
и кладем его в /etc/systemd/system/telegram-bot.service
Конфиг похож на обычный ini-файл:
After — запускать этот юнит после определенных демонов или целей (цель — это набор юнитов). Здесь указан network.target , это значит, что демон запустится после того как поднимутся сетевые интерфейсы.
Type — тип того, как запускается демон. Чаще всего используется simple , forking или one-shot . simple — демон запускается и начинает ожидать на консоле и не отфоркивается. forking — демон запускается, потом форкается и завершает родительский процесс. Многие программы именно так и запускаются, чтобы перейти в background режим. Например, nginx запускается по такой схеме. one-shot — используется для запуска скриптов которые запускаются, отрабатывают и завершаются. В моем случае это не скрипт и программа не форкается , поэтому тип — simple
ExecStart — команда для запуска демона.
Restart — рестартовать демон, если он завершится/упадет. При always systemd будет перезапускать демон независимо от того почему он завершился. Можно указать on-failure , тогда будет перезапускаться если демон вышел с ненулевым кодом возврата или был завершен по сигналу (kill DAEMONPID)
WantedBy — говорим, что запускать этот демон когда система грузится в multi-user режиме
Далее делаем релоад systemd:
И добавляем созданный юнит в автозагрузку:
Все. Сервис добавлен в автозагрузку, но еще не запущен. Запустим:
Источник
Управление службами Systemd. Часть 1 из 3
Systemd — это система инициализации и системный менеджер, который становится новым стандартом для Linux. Systemd управляет юнитами, которые определяются в так называемых юнит-файлах. Cамым распространённым юнитом является сервис (файл с расширением .service). Основной инструмент для управления сервисами — команда systemctl .
Управление сервисами
Основная цель Systemd — инициализировать компоненты, которые должны запускаться после загрузки ядра Linux. Systemd (и команда systemctl ) также используется для управления сервисами и демонами сервера.
Запуск и остановка сервиса
Для запуска сервиса предназначена команда start :
Чтобы остановить сервис, достаточно ввести команду stop :
Перезапуск и перезагрузка
Для запуска сервиса systemd предназначена команда restart :
Если приложение может перезагрузить свои конфигурационные файлы (без перезапуска), можно использовать команду reload :
Если не известно, может ли сервис перезагрузить свои файлы, тогда используется команда reload-or-restart . Она перезагрузит сервис, а если это невозможно — перезапустит его.
Включение и отключение сервисов
Приведенные выше команды необходимы при работе с сервисом в текущей сессии. Чтобы добавить сервис в автозагрузку Systemd, его нужно включить. Для этого существует команда enable :
Это создаст символическую ссылку на файл сервиса (этот файл обычно расположен в /lib/systemd/system или /etc/systemd/system ) в специальном каталоге, где Systemd ищет файлы для автозапуска (обычно /etc/systemd/system/something.target.want ).
Посмотрим содержимое каталога /etc/systemd/system и отфильтруем только директории *.wants :
Заглянем в директорию bluetooth.target.wants :
Заглянем в директорию multi-user.target.wants :
Чтобы убрать сервис из автозагрузки, нужно ввести:
Это удалит символическую ссылку, после этого сервис перестанет запускаться автоматически.
Проверка состояния сервиса
Для проверки состояния сервиса предназначена команда status :
Эта команда выведет состояние сервиса, иерархию групп и первые несколько строк лога. Например, при проверке состояния сервера Nginx, можно увидеть такой вывод:
Это предоставляет обзор текущего состояния приложения, уведомляет о любых проблемах и любых действиях, которые могут потребоваться в дальнейшем. Существуют также методы проверки конкретных состояний.
Последняя команда позволяет определить, находится ли юнит в состоянии сбоя. Это указывает на то, что возникла проблема с запуском рассматриваемого юнита.
Обзор состояния системы
Ранее мы рассмотрели команды, необходимые для управления отдельными сервисами, но они не очень полезны для изучения текущего состояния системы. Существует несколько команд systemctl, которые предоставляют эту информацию.
Просмотр списка текущих юнитов
Для просмотра списка текущих юнитов предназначена команда list-units :
В выводе есть такие столбцы:
- UNIT — название юнита
- LOAD — конфигурация юнита обработана?
- ACTIVE — сводное состояние юнита (запущен или нет)
- SUB — состояние более низкого уровня
- DESCRIPTION — краткое описание функций юнита
Поскольку команда list-units показывает по умолчанию только активные юниты, все записи будут показывать loaded в столбце LOAD и active в столбце ACTIVE .
Чтобы увидеть все юниты, которые загрузила (или попыталась загрузить) система Systemd, независимо от того, активны ли они в данный момент:
Можно использовать другие флаги для фильтрации результатов. Например, флаг state можно использовать для определения состояний LOAD , ACTIVE или SUB . Флаг all нужно оставить, чтобы система отображала неактивные юниты:
Еще один популярный фильтр — это type :
Флаги можно комбинировать:
Список юнит-файлов
Команда list-units отображает только юниты, которые система Systemd попыталась обработать и загрузить в память. Поскольку Systemd избирательно читает только те юнит-файлы, которые кажутся ей необходимыми, список не будет включать все доступные юнит-файлы. Чтобы просмотреть список всех доступных юнит-файлов (включая те, что Systemd не пыталась загрузить), нужно использовать команду list-unit-files .
Обычно столбец STATE содержит значения enabled , disabled , static или masked . В этом контексте static означает, что в юнит-файле нет раздела install , который используется для включения юнита. Таким образом, эти юниты невозможно включить. Обычно это означает, что юнит выполняет одноразовое действие или используется только как зависимость другого юнита и не должен запускаться сам по себе.
Источник
Systemctl-управление службами в Linux
Введение
В последнее время все больше дистрибутивов Linux переходит с других систем инициализации на systemd. Этот набор инструментов представляет быструю и гибкую модель инициализации для управления сервером с момента загрузки.
В данном руководстве мы рассмотрим наиболее важные команды, необходимые для управления сервером с поддержкой systemd. Они должны работать на версиях систем Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15 и выше.
Основы управления сервисами (юнитами)
Базовый объект, с которым работает systemd, называется “юнитом” (unit). Есть много видов юнитов, но самым распространенным является служба (service, файл юнита заканчивается на .service). Основным инструментом для управления службами на сервере является команда systemctl.
У всех команд обычной системы инициализации есть эквиваленты в systemctl. В примерах мы будем использовать службу nginx.service. Если у вас её нет, установите ее при помощи менеджера пакетов.
Для запуска службы нужно ввести:
Остановка осуществляется следующей командой:
Чтобы повторно загрузить файлы конфигурации службы, не прерывая ее работы, нужно выполнить команду:
Включение и отключение сервисов
По умолчанию большинство файлов юнитов systemd не запускаются при загрузке автоматически. Для настройки этой функции требуется “включить” юнит. Он привязывается к “цели” загрузки и запускается, когда выполняется это целевое действие.
Для включения автоматическооо запуска при загрузке введите:
Если нужно снова отключить службу:
Получение данных о состоянии системы
Мы можем получить от сервера с systemd огромное количество информации, чтобы узнать о состоянии системы.
Например, чтобы получить список юнитов, которые systemd считает активными, нужно выполнить следующую команду (можно даже не использовать опцию list-units, потому что она подразумевается по умолчанию):
Для вывода списка юнитов, которые systemd загружал или пытался загрузить в память, в том числе не активные в данный момент, нужно указать опцию —all:
sudo systemctl list-units —all
Чтобы вывести все установленные в системе юниты, в том числе те, которые systemd не пытался загрузить в память, выполните команду:
sudo systemctl list-unit-files
Представленные выше команды показывали общее состояние системы, но можно также получить информацию о состоянии отдельных юнитов.
Для просмотра обзора текущего состояния самого юнита можно воспользоваться опцией status команды systemctl. Вы увидите, активен ли юнит, получите информацию о процессе и последние записи журнала:
Файлы юнитов и зависимости
Файл юнита содержит параметры, используемые systemd для запуска и управления. Для просмотра полного содержимого файла юнита нужно выполнить команду:
Для просмотра дерева зависимостей юнита (другие юниты, активируемые systemd при запуске юнита), выполните команду:
Вывод списка зависимых юнитов, которые будут рекурсивно раскрыты. Для полного рекурсивного раскрытия всех зависимых юнитов (второй и большие уровни зависимости), воспользуйтесь опцией —all:
Для просмотра низкоуровневых данных о настройках юнита в системе используется опция show. В этом случае выводится значение каждого параметра, управляемого systemd:
Изменение файлов юнитов
Если требуется изменить файл юнита, это можно сделать непосредственно командой systemctl, чтобы не искать его на диске.
Для создания сниппета файла юнита (блок, который может использоваться для дополнения или замены параметров файла юнита по умолчанию) нужно воспользоваться опцией edit:
Если нужно изменить все содержимое файла, а не создавать сниппет, воспользуйтесь флагом —full:
После изменения файла юнита нужно перезагрузить сам процесс systemd для принятия изменений:
Использование целей
Одна из функций системы инициализации — перевод сервера в различные состояния. Обычно они называются уровнями запуска или уровнями выполнения. В заданный момент времени система может находиться только на одном уровне выполнения. В таблице предоставлены доступные уровни запуска
Цель | Уровень |
poweroff.target | 0 |
rescue.target | 1 |
multi-user.target | 2 |
multi-user.target | 3 |
multi-user.target | 4 |
graphical.target | 5 |
reboot.target | 6 |
В systemd вместо этого применяются цели. Цель — это точка синхронизации, которой сервер может воспользоваться для перехода в определенное состояние. К цели можно привязать службы и другие юниты, одновременно может быть активно несколько целей. Для просмотра полного списка целей в системе нужно выполнить команду:
Для просмотра цели по умолчанию, которой systemd стремится достичь при загрузке (которая, в свою очередь, запускает все файлы юнитов, составляющие дерево зависимости этой цели), выполните команду:
multi-user.target соответствует третьему уровню запуска, проверить это можно командой
При помощи опции set-default изменить цель по умолчанию, которая будет использоваться при загрузке:
Для просмотра привязанных к цели юнитов можно выполнить следующую команду:
Изменять состояние системы для перехода между можно при помощи isolate (изолировать). Она останавливает все юниты, не привязанные к указанной цели. Убедитесь что изолируемая вами цель не останавливает важные службы. Например команда
Перезагрузит вашу систему.
Выключение и перезагрузка сервера
Для некоторых важных состояний системы есть ярлыки. Например, такой командой можно выключить сервер:
Загрузка в режиме восстановления:
В большинстве операционных систем для этих операций есть стандартные алиасы, так что можно просто ввести
без systemctl, но их может и не быть.
Заключение
Мы рассмотрели основы управления юнитами и службами при помощи команды systemctl, а также познакомились с концепцией целей. Для более подробной информации можно обратиться к соответствующим man-страницам
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Управление сервисами в Linux. Команда systemctl
Что такое сервисы в Linux
Сервисы или службы — это программы, которые работают в системе Linux в фоновом режиме. Обычно они запускаются при загрузке системы. Большинство сервисов необходимы для полноценной работы системы, то есть они являются своего рода кирпичиками, из которых строится работающая система.
При запуске системы загружается целый ряд сервисов, которые включены для автозагрузки. Сервисы работают пока система запущена, и выгружаются при выключении системы.
Чаще всего в Linux дистрибутивах для инициализации сервисов используется демон Systemd. К Systemd-дистрибутивам относятся Ubuntu, Debian, Linux Mint, Fedora, openSUSE, Solus и другие.
Есть дистрибутивы, которые не используют Systemd. Вместо Systemd могут использоваться такие системы инициализации, как Upstart, SysV.
В качестве примеров сервисов можно привести: веб-сервер Apache, Network Manager, файрвол Ufw и другие.
Для управления сервисами (Systemd) используется утилита systemctl . Ниже мы рассмотрим основные команды данной утилиты.
Список сервисов
Чтобы просмотреть список всех сервисов можно воспользоваться командой:
Данная команда пробегает по алфавитному списку всех доступных сервисов и выполняет для них команду status.
В выводе команды используются следующие обозначения:
- [ + ] — запущенный сервис.
- [ — ] — остановленный сервис.
- [ ? ] — для данного сервиса отсутствует команда status.
Запуск сервиса
Для запуска сервиса используется команда systemctl start имя_сервиса
Останов сервиса
Для остановки сервиса используется команда systemctl stop имя_сервиса
Перезапуск сервиса
Перезапуск сервиса выполняется командой systemctl restart имя_сервиса
Обычно перезапуск конкретного сервиса требуется, когда были изменены настройки данного сервиса.
Некоторые сервисы поддерживают «мягкую» перезагрузку. В этом случае сервис считывает связанные с ним файлы конфигурации, но не прерывает процесс сервиса. Для выполнения «мягкой» перезагрузки используется команда systemctl reload имя_сервиса . Не все сервисы поддерживают «мягкую» перезагрузку. Если она не поддерживается, то появится сообщение вида: Failed to reload ufw.service: Job type reload is not applicable for unit ufw.service.
Автозагрузка сервисов
Чтобы сервис стартовал (загружался) при запуске системы, его нужно включить в список автозагрузки. Для этого используется команда systemctl enable имя_сервиса
Чтобы включить сервис в автозапуск и сразу же запустить используется команда:
Чтобы удалить сервис из автозагрузки, используется команда systemctl disable имя_сервиса
Статус сервиса
Для вывода информации (статуса) сервиса используется команда systemctl status имя_сервиса
Чтобы проверить, запущен ли в данный момент сервис, используется команда systemctl is-active имя_сервиса
Чтобы проверить, включен ли сервис для автозапуска при загрузке системы, используется команда systemctl is-enabled имя_сервиса
Заключение
Мы рассмотрели наиболее часто используемые команды утилиты systemctl. Полный список команд и опций утилиты systemctl можно получить, выполнив:
Источник