Debian не запускается служба

Обновлено: 04.07.2024

systemd — это система инициализации и системный диспетчер, который стал новым стандартом для дистрибутивов Linux. Из-за сложной адаптивности знакомство с системой systemd оправдано, поскольку это существенно упростит администрирование серверов. Изучение и использование инструментов и демонов, которые включают systemd , поможет вам лучше оценить предоставляемые возможности и гибкость или, по крайней мере, работать с минимальным количеством проблем.

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

Обратите внимание, что хотя система systemd стала системой инициализации по умолчанию для многих дистрибутивов Linux, она не используется повсеместно во всех дистрибутивах. По мере изучения этого руководства, если ваш терминал выводит ошибку bash: systemctl is not installed , скорее всего, на вашей машине установлена другая система инициализации.

Управление службами

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

В systemd целью большинства действий являются «модули», являющиеся ресурсами, которыми systemd знает, как управлять. Модули распределяются по категориям по типу ресурса, который они представляют, и определяются файлами, известными как файлы модулей. Тип каждого модуля можно вывести из суффикса в конце файла.

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

Запуск и остановка служб

Чтобы запустить службу systemd , используя инструкции в файле модуля службы, используйте команду start . Если вы работаете как пользователь без прав root, вам потребуется использовать sudo , поскольку это влияет на состояние операционной системы:

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

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

Чтобы остановить работающую в данный момент службу, можно использовать команду stop :

Перезапуск и перезагрузка

Чтобы перезапустить работающую службу, можно использовать команду restart :

Если данное приложение может перезагрузить файлы конфигурации (без перезапуска), вы можете выдать команду reload для инициализации этого процесса:

Если вы не уверены, есть ли у службы функция перезагрузки своей конфигурации, можно использовать команду reload-or-restart . Это перезагрузит необходимую конфигурацию при наличии. В противном случае будет перезагружена служба для выбора новой конфигурации:

Включение и отключение служб

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

Для запуска службы во время загрузки используйте команду enable :

При этом будет создана символическая ссылка из системной копии служебного файла (обычно в /lib/systemd/system или /etc/systemd/system ) в месте на диске, где systemd ищет файлы для автозапуска (обычно /etc/systemd/system/ some_target .target.wants ; что такое цель, мы рассмотрим далее в этом руководстве).

Чтобы отключить автоматический запуск службы, можно ввести следующее:

При этом будет удалена символическая ссылка, что укажет на то, что служба не должна запускаться автоматически.

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

Проверка статуса служб

Чтобы проверить статус службы в вашей системе, можно использовать команду status :

При этом вы получите статус службы, иерархию контрольных групп и первые несколько строк журнала.

Например, при проверке статуса сервера Nginx вы можете видеть следующий вывод:

Это дает вам хороший обзор текущего статуса приложения и уведомляет о наличии каких-либо проблем или необходимости выполнения каких-либо действий.

Также есть методы для проверки определенных статусов. Например, чтобы проверить, активен ли (работает ли) модуль в данный момент, можно использовать команду is-active :

Это вернет текущий статус модуля, который обычно active или inactive . Код выхода будет «0», если он активен, и результат будет проще парсить в скрипты оболочки.

Чтобы увидеть, включен ли модуль, можно использовать команду is-enabled :

Это выведет информацию о том, что служба enabled или disabled , и снова установит код выхода на «0» или «1» в зависимости от вопроса команды.

Третья проверка заключается в проверке того, находится ли модуль в состоянии сбоя. Это означает, что была проблема, которая запустила данный модуль:

Это вернет active , если он работает должным образом, или failed , если возникла ошибка. Если модуль был намеренно остановлен, может вернуться unknown или inactive . Статус выхода «0» означает, что произошел сбой, а статус выхода «1» указывает на какой-либо другой статус.

Обзор состояния системы

Команды до сих пор были полезны для управления отдельными службами, но они не очень подходят для понимания текущего состояния системы. Существует ряд команд systemctl , предоставляющих эту информацию.

Список текущих модулей

Чтобы увидеть список всех активных модулей, о которых знает systemd , можно использовать команду list-units :

Это покажет вам список всех модулей, которые у systemd активны в системе. Результат будет выглядеть примерно так:

Вывод содержит следующие столбцы:

  • UNIT: имя модуля systemd
  • LOAD: указывает на то, парсила ли systemd конфигурацию модуля. Конфигурация загруженных модулей сохраняется в памяти.
  • ACTIVE: краткое состояние активности модуля. Обычно это довольно стандартный способ сообщить, запущен модуль или нет.
  • SUB: это состояние более низкого уровня, которое указывает более подробную информацию о модуле. Это часто зависит от типа модуля, состояния и фактического метода работы модуля.
  • DESCRIPTION: краткое текстовое описание того, чем является модуль/что делает.

Поскольку команда list-units показывает по умолчанию только активные модули, для всех вводов выше отобразится loaded в столбце LOAD и active в столбце ACTIVE. Это отображение фактически является поведением по умолчанию systemctl при вызове без дополнительных команд, поэтому вы увидите то же, что и при вызове systemctl без аргументов:

Мы можем использовать systemctl для вывода различной информации путем добавления дополнительных флагов. Например, чтобы увидеть все модули, которые загрузила система systemd (или пыталась загрузить), независимо от их активности в данный момент, можно использовать следующий флаг --all :

Это отобразит все модули, которые загрузила или пыталась загрузить система systemd независимо от текущего состояния системы. Некоторые модули становятся неактивными после работы, а некоторые модули, которые система systemd пыталась загрузить, могут не быть найдены на диске.

Вы можете использовать другие флаги для фильтрации этих результатов. Например, мы можем использовать флаг --state= для указания состояния LOAD, ACTIVE или SUB, которое мы хотим увидеть. Вам потребуется сохранить флаг --all , чтобы systemctl позволила отображать неактивные модули:

Другим распространенным фильтром является фильтр - --type= . Мы можем задать systemctl только для отображения модулей интересующего нас типа. Например, чтобы увидеть только активные модули службы, мы можем:

Список все файлов модулей

Команда list-units отображает только модули, которые система systemd пыталась парсить или загрузить в память. Поскольку systemd будет считывать только те модули, которые считает необходимыми, это необязательно будут все модули, доступные в системе. Чтобы увидеть все доступные файлы модулей в путях systemd , включая те, что система systemd пыталась загрузить, можно использовать команду list-unit-files :

Модули являются представлениями ресурсов, о которых знает systemd . Поскольку система systemd необязательно считывала все определения модуля в этом виде, она представляет информацию только о самих файлах. Вывод содержит два столбца: файл модуля и состояние.

Состояние будет, как правило, enabled , disabled , static или masked . В этом контексте static обозначает, что файл модуля не содержит раздел install , который используется для включения модуля. Эти модули как таковые не могут быть включены. Обычно это означает, что модуль выполняет разовое действие или используется только как зависимость другого модуля и не должен работать самостоятельно.

Мы рассмотрим сразу же, что означает masked .

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

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

Отображение файла модуля

Чтобы отобразить файл модуля, который система systemd загрузила в систему, можно использовать команду cat (она была добавлена в версию systemd 209). Например, чтобы увидеть файл модуля демона-планировщика atd , можно ввести следующее:

Вывод — это файл модуля, известный выполняемому в настоящее время процессу systemd . Это может быть важно, если вы недавно модифицировали файлы модуля или если вы переопределяете определенные опции во фрагменте файла модуля (мы рассмотрим это позже).

Отображение зависимостей

Чтобы увидеть дерево зависимостей модуля, можно использовать команду list-dependencies :

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

Рекурсивные зависимости отображаются только для модулей .target , которые указывают состояние системы. Чтобы рекурсивно перечислить все зависимости, добавьте флаг --all .

Чтобы отобразить обратные зависимости (модули, зависящие от указанного модуля), можно добавить в команду флаг --reverse . Другие полезные флаги --before и --after могут быть использованы для отображения модулей, которые зависят от указанного модуля, соответственно, перед ними и после.

Проверка свойств модуля

Чтобы увидеть свойства более низкого уровня модуля, можно использовать команду show . При этом будет выведен список свойств, заданных для указанного модуля с помощью формата key=value :

Если вы хотите отобразить одно свойство, можно передать флаг -p с именем свойства. Например, чтобы увидеть конфликты, которые есть у модуля sshd.service , можно ввести следующее:

Маскировка и снятие маскировки модулей

В разделе управления службами мы узнали, как остановить или отключить службу, но systemd также имеет возможность отметить модуль как полностью незапускаемый, автоматически или вручную, связав его с /dev/null . Это называется маскировкой модуля, и она возможна с помощью команды mask :

Это не позволит запустить службу Nginx автоматически или вручную, пока она замаскирована.

Если вы проверите list-unit-files , вы увидите, что служба теперь указана как замаскированная:

Чтобы снять маскировку модуля и сделать его доступным для использования снова, используйте команду unmask :

Это вернет модуль в его предыдущее состояние, что позволит его запускать или включать.

Редактирование файлов модулей

Хотя конкретный формат файлов модулей выходит за рамки этого руководства, systemctl предоставляет встроенные механизмы для редактирования и модификации файлов модулей при необходимости изменений. Эта функция добавлена в версию systemd 218.

Команда edit по умолчанию откроет фрагмент файла модуля для интересующего модуля:

Это будет пустой файл, который можно использовать для переопределения или добавления директив в определение модуля. Каталог будет создан в каталоге /etc/systemd/system , который содержит название модуля с добавлением .d . Например, для nginx.service будет создан каталог под названием nginx.service.d .

В этом каталоге будет создан фрагмент под названием override.conf . При загрузке модуля systemd в памяти соединит фрагмент переопределения с полным файлом модуля. Директивы фрагмента получат приоритет над найденными в оригинальном файле модуля.

Если вы хотите редактировать весь файл модуля, а не создавать фрагмент, можно передать флаг --full :

Это загрузит текущий файл модуля в редактор, где его можно редактировать. После выхода из редактора измененный файл будет записан в /etc/systemd/system , что будет иметь приоритет над определением модуля системы (обычно находится где-то в /lib/systemd/system ).

Чтобы удалить какие-либо сделанные добавления, удалите либо каталог конфигурации модуля .d или модифицированный служебный файл из /etc/systemd/system . Например, для удаления фрагмента можно ввести следующее:

Чтобы удалить весь отредактированный файл модуля, добавим:

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

Настройка состояния системы (уровень запуска) с помощью целей

Целями являются специальные файлы модулей, которые описывают состояние системы или точку синхронизации. Как и другие модули, файлы, которые определяют цели, могут быть идентифицированы по суффиксу, которым в данном случае является .target . Цели сами по себе немного значат, а используются для группировки других модулей.

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

Например, swap.target используется для указания того, что переключение готово к использованию. Модули, являющиеся частью этого процесса, могут синхронизироваться с этой целью путем указания в своей конфигурации, что они WantedBy= или RequiredBy= swap.target . Модули, которым требуется возможность переключения, могут указывать это состояние с помощью спецификаций Wants= , Requires= и After= для указания характера их отношений.

Получение и настройка цели по умолчанию

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

Если вы хотите задать другую цель по умолчанию, можно использовать set-default . Например, если у вас установлен графический рабочий стол и вы хотите загрузить систему в него по умолчанию, можно изменить цель по умолчанию соответственно:

Список доступных целей

Вы можете получить список имеющихся целей в вашей системе, введя:

В отличие от уровней запуска, несколько целей могут быть активны одновременно. Активная цель указывает, что система systemd попыталась запустить все модули, привязанные к цели, и не попыталась закрыть их снова. Чтобы увидеть все активные цели, введите:

Изолирование целей

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

Например, если вы работаете в графической среде с активным graphical.target , можно закрыть графическую систему и перевести систему в состояние многопользовательской командной строки путем изоляции multi-user.target . Поскольку graphical.target зависит от multi-user.target , а не наоборот, все графические модули будут остановлены.

Возможно, вы захотите посмотреть на зависимости цели, которую вы изолируете, перед выполнением этой процедуры, чтобы убедиться, что не остановлены важные службы:

Если вы удовлетворены модулями, которые будут сохранены в активном состоянии, можно изолировать цель, введя:

Использование комбинации быстрого ввода для важных событий

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

Например, чтобы перевести систему в режим спасения (один пользователь), можно использовать команду rescue вместо isolate rescue.target :

Это обеспечит дополнительную функцию предупреждения всех подключенных пользователей о событии.

Чтобы остановить систему, можно использовать команду halt :

Для инициализации полного отключения можно использовать команду poweroff :

Перезапуск можно начать с помощью команды reboot :

Все это оповестит подключенных пользователей о том, что происходит событие, что-то, что только выполняет или изолирует цель, не сработает. Обратите внимание, что большинство машин будет привязывать более короткие, более традиционные команды для этих операций, чтобы правильно работать с systemd .

Например, для перезагрузки системы обычно можно ввести следующее:

Заключение

К этому моменту вы должны уже ознакомиться с некоторыми базовыми возможностями команды systemctl , которая позволяет взаимодействовать и контролировать экземпляр systemd . Утилита systemctl будет главной точкой взаимодействия для управления службами и состоянием системы.

Хотя systemctl работает главным образом с основным процессом systemd , в экосистеме systemd есть другие компоненты, которые контролируются другими утилитами. Другие возможности, такие как управление журналами и сеансы пользователя, обрабатываются отдельными демонами и утилитами управления ( journald / journalctl и logind / loginctl соответственно). Знакомство с этими другими инструментами и демонами упростит задачу управления.

В операционной системе linux, так же как и в Windows, кроме обычных программ, которые могут взаимодействовать с пользователем есть еще один вид программ. Это работающие в фоне службы. Важность служб тяжело переоценить, они следят за состоянием системы, обеспечивают автоматическое подключение внешних устройств и сети, позволяют процессам взаимодействовать с оборудованием (dbus), а также в виде служб реализованы различные веб-серверы и серверы баз данных. В отличие от пользовательских программ, службы выполняются в фоне, и пользователь не имеет к ним прямого доступа. Пользователь еще не вошел в систему, только началась загрузка а основные службы уже запущенны и работают.

В этой статье мы рассмотрим управление службами Linux. Мы не будем трогать уже устаревшие системы, такие как SysVinit, сосредоточимся только на Systemd. Вы узнаете, как посмотреть запущенные службы linux, а также останавливать и запускать их самому.

Немного теории

Но потом на смену этому методу пришла новая модель и система инициализации systemd. Система инициализации запускается сразу после загрузки ядра и начинает инициализировать службы, теперь появилась возможность параллельной инициализации, а также зависимостей между службами. Таким образом, теперь можно определить сложное дерево порядка запуска служб. Но мы не будем вникать в подробности создания служб, нас интересует только сам процесс запуска. После запуска systemd собирает весь вывод службы в лог, и следит за ее работой, если служба аварийно завершилась, то автоматически ее перезапускает.

Служба в Systemd описывается файлом юнита, в нем описано что с ней нужно делать и как себя вести. Существуют такие типы служб:

  • service - обычная служба, программа
  • target - группа служб
  • automount - точка автоматического монтирования
  • device - файл устройства, генерируется на этапе загрузки
  • mount - точка монтирования
  • path - файл или папка
  • scope - процесс
  • slice - группа системных служб systemd
  • snapshot - сохраненное состояние запущенных служб
  • socket - сокет для взаимодействия между процессами.

Нас будут интересовать только service, и совсем немного target, но мы рассмотрели все остальные, чтобы вы смогли взглянуть на картину немного шире. Основы рассмотрели, теперь будет настройка служб LInux.

Утилита systemctl

В Systemd есть специальный инструмент для управления службами в Linux - systemctl. Эта утилита позволяет делать очень много вещей, начиная от перезапуска службы linux и проверки ее состояния, до анализа эффективности загрузки службы. Синтаксис у утилиты такой:

$ systemctl опции команда служба служба.

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

Рассмотрим все по порядку. Опции очень сильно зависят от команд, поэтому рассмотрим их позже, а пока пройдемся по командах:

А теперь основные опции:

Как видите, опции будут мало полезны и лучше обратить больше внимания на команды, с помощью них выполняются все действия.

Управление службами Linux

Теперь, когда вы уже знаете все основы, команды и параметры можно переходить к делу. Со всеми остальными тонкостями разберемся по пути. Сначала давайте посмотрим запущенные службы linux. Нас будут интересовать только программы, а не все эти дополнительные компоненты, поэтому воспользуемся опцией type:

systemctl list-units --type service

services

Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Программа не пересматривает все файлы, поэтому будут показаны только те службы, к которым уже обращались. Состояние loaded - означает, что конфигурационный файл был успешно загружен, следующая колонка active - служба была запущена, а running или exited значит выполняется ли сейчас служба или она успешно завершила свою работу. Листать список можно кнопками вверх/вниз.

Следующая команда позволяет получить список служб linux, в который входят все службы, даже не запущенные, те, которые не запускались, но известны systemd, но это еще не все службы в системе:

systemctl list-units --type service -all

services1

Дальше больше. Вы можете отсортировать список служб systemctl по состоянию. Например, только выполняющиеся:

systemctl list-units --type service --state running

services2

Или те, которые завершились с ошибкой:

systemctl list-units --type service --state failed

service4

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

Теперь отфильтруем только службы linux:

systemctl list-unit-files --type service

Здесь вы тоже можете использовать фильтры по состоянию. Теперь вы знаете как посмотреть запущенные службы linux, идем дальше.

Чтобы запустить службу используется команда start, например:

sudo systemctl start application.service

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

Остановить службу linux можно командой:

sudo systemctl stop application

Посмотреть состояние службы позволяет команда status:

sudo systemctl status application

services4

Здесь вы можете видеть, состояние running, exited, dead, failed и т д. А также несколько последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет.

Автозагрузка служб в systemd

Как вы знаете, systemd позволяет автоматически загружать службы при запуске системы по мере их надобности. Команда list-unit-files показывает добавлена ли служба в автозагрузку.

Вообще, здесь может быть несколько состояний - enabled - в автозагрузке, disabled - автозагрузка отключена, masked - служба скрыта и static - значит что служба в автозагрузке, но вы не можете ее отключить.

Поэтому чтобы получить список служб linux, запускаемых автоматически достаточно отфильтровать ее вывод по состоянию:

systemctl list-unit-files --state enabled

services5

services6

Все службы, запускаемые по умолчанию. Можете также посмотреть службы static. Чтобы добавить службу в автозагрузку linux используйте команду enable:

sudo systemctl enable application

services7

А для того чтобы убрать ее из автозагрузки:

sudo systemctl disable applciation

services8

Также, вы можете посмотреть разрешена ли сейчас автозагрзука для службы:

sudo systemctl is-enabled application

services9

Утилита просто выведет состояние enabled, disabled или static.

Выводы

Теперь настройка служб Linux не вызовет у вас проблем. Много чего мы упустили, systemd - очень большая, сложная и многофункциональная система, которую не охватить в одной статье. Но и также очень сложно понять. Но я думаю, что все, что касается управления службами Linux мы разобрали. Если у вас остались вопросы, спрашивайте в комментариях!

В Windows у меня есть менеджер сервисов, где я вижу все системные сервисы, которые можно запустить через саму Windows, я настраиваю пользователя, которого он использует, управление правами там, и я могу передавать переменные и некоторую другую информацию сервисам , Я могу назвать их, и я могу создавать дубликаты служб одной программы и так далее. Так что у меня есть основной инструмент управления в Windows.

Как я могу сделать то же самое в Linux? Как я могу запустить «svnserve» при запуске или как настроить службы для работы в особом контексте. Как я могу просмотреть все «запрограммированные» услуги?

Какой дистрибутив и версию вы используете? Управление сервисами (сервисы почти всегда называются «демонами» в мире Unix) раньше было простым и полустандартным. Вещи более разнообразны в эти дни. И не всегда приятно. :) Кроме того, что вы подразумеваете под контекстом ? Хотя кажется, что systemd медленно побеждает в системной войне init. Debian - последнее большое препятствие, все еще использующее старый SysVinit, и в настоящее время он находится в процессе определения, какую систему инициализации использовать. В настоящее время я работаю с Debian (последняя стабильная версия), и под контекстом я подразумеваю переменные пути или заданный пользовательский контекст.

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

Но вот ответ на ваш вопрос для каждой из 3 систем инициализации:

SysVinit

SysVinit в настоящее время используется Debian и RedHat. Хотя следующая версия RedHat (7) будет использовать systemd.

Универсальный способ включения служб SysVinit при загрузке заключается в символической ссылке на них /etc/rc3.d (или /etc/rc2.d ). Все услуги можно найти в /etc/init.d . Однако обратите внимание, что дистрибутивы часто имеют свой собственный инструмент для управления этими файлами, и этот инструмент следует использовать вместо этого. (Fedora / RedHat имеет service и chkconfig , Ubuntu имеет update-rc.d )

Список услуг:

Запустить сервис:

Остановить сервис:

Включить сервис:

( S95 используется для указания порядка. S01 начнется раньше S02 и т. д.)

Отключить службу:

Systemd

Наиболее заметным дистрибутивом, использующим systemd, является Fedora. Хотя это используется многими другими. Кроме того, с учетом того, что Debian решил использовать systemd вместо upstart, он станет де-факто выскочившей системой для большинства дистрибутивов (ubuntu уже объявила о том, что будет отказываться от upstart для systemd).

Список услуг:

Запустить сервис:

Остановить сервис:

Включить сервис:

Отключить службу:

Выскочка

Upstart был разработан ребятами Ubuntu. Но после того, как Debian решил использовать systemd , Ubuntu объявил, что они выпадут .

Upstart также кратко использовался RedHat, поскольку он присутствует в RHEL-6, но он обычно не используется.

Список услуг:

Запустить сервис:

Остановить сервис:

Включить сервис:

2 способа, к сожалению:

Там будет файл, /etc/default/ который содержит строку ENABLED=. . Измените эту строку на ENABLED=1 .

Там будет файл /etc/init/.override . Убедитесь, что он содержит start (или отсутствует полностью), нет manual .

Отключить службу:

Примечание. Существует также система инициализации OpenRC, которая используется Gentoo. В настоящее время Gentoo является единственным дистрибутивом, который его использует, и он не рассматривается для использования и не поддерживается другими дистрибутивами. Так что я не рассматриваю его использование (хотя, если мнение таково, я могу добавить).

OpenRC - это своего рода абстракция для SysVinit. Это не заменяет это, это добавляет к этому. Отличная рецензия! Просто пара небольших исправлений: RHEL 6.x (и, следовательно, CentOS 6.x и остальные производные) использует upstart, как Ubuntu (хотя большинство сервисов все равно используют сценарии SysV в любом случае). Кроме того, я бы добавил, что «chkconfig» (RH) и «update-rc.d» (Debian) являются «официальными» способами добавления ссылок в каталоги rc? .D. @rsuarez хорошая мысль о RHEL6. Хотя, кажется, не так уж много его использует. Большая часть системы по-прежнему работает через унаследованный SysVinit (17 выскочек, 89 SysVinit в одной из моих систем RHEL6). И так chkconfig и update-rc.d упоминаются. Смотрите второй абзац под SysVinit :-) Спасибо за исчерпывающий ответ, теперь у меня есть общая картина. В настоящее время я использую Debian (последняя стабильная версия), здесь, в немецкоязычной Европе, он дает лучшие рекомендации, но, возможно, я попробую Redhat.

В разных дистрибутивах используются разные механизмы управления сервисами. Программное обеспечение для управления службами называется init , после традиционного имени самого первого процесса (с идентификатором процесса 1), который отвечает за запуск других.

Debian использует традиционный вариант init для SysVinit . В этой системе в каталоге есть набор сценариев /etc/init (это и другое расположение может незначительно отличаться в разных дистрибутивах, использующих SysVinit). Эти сценарии вызываются не напрямую, а через символические ссылки в каталогах /etc/rc?.d . Именно наличие и название этих символических ссылок определяют, когда запускаются службы. Для получения более подробной информации прочитайте главу об инициализации в Справочнике по Debian .

Посмотрите, /etc/rc?.d чтобы увидеть, какие услуги уже присутствуют. Буква или цифра перед точкой - это уровень запуска; записи, имя которых начинается с S , выполняются с аргументом start при входе в уровень выполнения, а записи, имя которых начинается с K , выполняются при выходе из уровня выполнения. Обычная последовательность уровней запуска: S во время загрузки (так /etc/rcS.d/S* выполняются), затем 2 (так /etc/rc2.d/S* выполняются). Во время выключения /etc/rc2.d/K* выполняются, затем уровень запуска переключается на 0 (или 6 для перезагрузки).

Короче говоря, если вы хотите создать скрипт запуска для нового сервиса:

  • Написать сценарий оболочки в /etc/init.d . Этот сценарий должен принимать один аргумент , который может быть start , stop , force-reload , restart , или ( по желанию) reload или status . Разница между reload и restart заключается в том, что restart это эквивалентно stop последующему, в start то время как reload перезагружает конфигурацию, ничего не останавливая (если служба поддерживает это); force-reload делает, reload если доступно и restart иначе. Смотрите примеры существующих файлов и Выполнение сценариев во время загрузки с Debian .
  • Запустите, update-rc.d чтобы создать символические ссылки для запуска и остановки вашего сервиса. Большинство сервисов работают на уровнях выполнения 2, 3, 4 и 5.

От традиционного Unix-фона нет ничего особенного в услугах. Сервисы - это просто процессы, но с двумя исключениями: им не нужен терминал, и они запускаются при загрузке. как они запускаются при загрузке, зависит от init (который может быть sysv init, bsd init, upstart, systemd или что-то еще; проверьте страницу man для init) и используете ли вы оболочку для задачи или для конфигурации init. Ничто не мешает вам запускать службу из терминала, на самом деле это обычное явление для целей тестирования.


Systemd в Linux. Команда systemctl

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

При запуске системы загружается целый ряд сервисов, которые включены для автозагрузки. Сервисы работают пока система запущена, и выгружаются при выключении системы.

Чаще всего в Linux дистрибутивах для инициализации сервисов используется демон Systemd. К Systemd-дистрибутивам относятся Ubuntu, Debian, Linux Mint, Fedora, openSUSE, Solus и другие.

Есть дистрибутивы, которые не используют Systemd. Вместо Systemd могут использоваться такие системы инициализации, как Upstart, SysV.

В качестве примеров сервисов можно привести: веб-сервер Apache, Network Manager, файрвол Ufw и другие.

Для управления сервисами (Systemd) используется утилита systemctl . Ниже мы рассмотрим основные команды данной утилиты.

Список сервисов

Чтобы просмотреть список всех сервисов можно воспользоваться командой:

Список всех сервисов Systemd

Данная команда пробегает по алфавитному списку всех доступных сервисов и выполняет для них команду status.

В выводе команды используются следующие обозначения:

  • [ + ] - запущенный сервис.
  • [ - ] - остановленный сервис.
  • [ ? ] - для данного сервиса отсутствует команда status.

Запуск сервиса

Для запуска сервиса используется команда systemctl start имя_сервиса

Останов сервиса

Для остановки сервиса используется команда systemctl stop имя_сервиса

Перезапуск сервиса

Перезапуск сервиса выполняется командой systemctl restart имя_сервиса

Обычно перезапуск конкретного сервиса требуется, когда были изменены настройки данного сервиса.

Автозагрузка сервисов

Чтобы сервис стартовал (загружался) при запуске системы, его нужно включить в список автозагрузки. Для этого используется команда systemctl enable имя_сервиса

Чтобы включить сервис в автозапуск и сразу же запустить используется команда:

Чтобы удалить сервис из автозагрузки, используется команда systemctl disable имя_сервиса

systemctl enable disable

Статус сервиса

Для вывода информации (статуса) сервиса используется команда systemctl status имя_сервиса

systemctl status

Чтобы проверить, запущен ли в данный момент сервис, используется команда systemctl is-active имя_сервиса

Чтобы проверить, включен ли сервис для автозапуска при загрузке системы, используется команда systemctl is-enabled имя_сервиса

systemctl is-enabled is-active

Заключение

Мы рассмотрели наиболее часто используемые команды утилиты systemctl. Полный список команд и опций утилиты systemctl можно получить, выполнив:

Читайте также: