Файлы сервисов в Linux Debian и systemd:
Файлы сервисов, или юниты (unit files), в Linux Debian, которые управляются systemd, играют ключевую роль в запуске, остановке и управлении службами. Они определяют, как и когда запускать процессы. Эти файлы располагаются в нескольких директориях, и важно понимать их иерархию:
Системные службы (глобальные, для всех пользователей):
/lib/systemd/system/
или /usr/lib/systemd/system/
: Это место, где находятся стандартные файлы юнитов, поставляемые пакетами из репозиториев Debian. Не рекомендуется изменять эти файлы напрямую, так как они могут быть перезаписаны при обновлении пакетов.
/etc/systemd/system/
: Здесь располагаются локальные конфигурационные файлы юнитов, которые имеют приоритет над файлами из /lib/systemd/system/
или /usr/lib/systemd/system/
. Это место, где вы должны размещать свои пользовательские файлы юнитов, а также модифицированные версии стандартных юнитов (например, с помощью “override” файлов). Файлы, размещенные здесь, являются глобальными и распространяются на все сеансы пользователей.
Службы пользователя:
/usr/lib/systemd/user/
(редко используется): Обычно содержит стандартные юниты для пользовательских сессий, поставляемые пакетами. Также не рекомендуется изменять их напрямую.
/etc/systemd/user/
(менее распространено): Это аналог /etc/systemd/system/
, но для пользовательских сессий. Здесь вы можете размещать локальные юниты, которые распространяются на все сеансы всех пользователей.
$HOME/.config/systemd/user/
или ~/.config/systemd/user/
: Здесь располагаются юниты, специфичные для конкретного пользователя. Это место для ваших пользовательских служб, которые должны запускаться только в контексте вашей учетной записи.
Краткое резюме по приоритету и использованию:
/etc/systemd/system/
: Самый высокий приоритет для глобальных сервисов. Здесь размещайте свои изменения и кастомные юниты.
/lib/systemd/system/
или /usr/lib/systemd/system/
: Стандартные файлы юнитов. Избегайте прямого редактирования.
/etc/systemd/user/
: Локальные пользовательские юниты для всех пользователей.
~/.config/systemd/user/
: Локальные пользовательские юниты для конкретного пользователя.
/usr/lib/systemd/user/
: Стандартные пользовательские юниты. Избегайте прямого редактирования.
Управление службами:
Для управления службами используется команда systemctl
. Эта команда позволяет запускать, останавливать, перезапускать, проверять статус, включать (при загрузке системы) и выключать службы. Примеры:
sudo systemctl start <имя_юнита>
(запуск службы)
sudo systemctl stop <имя_юнита>
(остановка службы)
sudo systemctl status <имя_юнита>
(просмотр статуса)
sudo systemctl enable <имя_юнита>
(запуск при загрузке)
sudo systemctl disable <имя_юнита>
(отключение запуска при загрузке)
systemctl --user start <имя_юнита>
(запуск службы пользователя)
Дополнительные комментарии:
Юниты могут иметь разные типы: .service
, .socket
, .target
, .timer
и другие.
Пользовательские юниты запускаются в контексте конкретного пользователя, поэтому не требуют sudo
Для изменения стандартных юнитов рекомендуется использовать механизм “override” файлов в директории /etc/systemd/system/
(создание директории <имя_юнита>.service.d
и файла override.conf
в ней), а не редактировать исходные файлы напрямую.
systemd
является мощной и гибкой системой, и понимание расположения файлов юнитов является важным шагом в освоении Linux.
Список запущенных служб:
sudo systemctl list-units --type=service --state=running
--type=service
: Фильтрует список, показывая только службы.
--state=running
: Показывает только запущенные службы.
Список всех служб:
sudo systemctl list-units --type service --all
--all
: Показывает все службы, включая остановленные, активные и другие состояния. Это полезно для поиска служб, которые не работают как ожидалось.
Статус всех служб (неидеальный вариант):
sudo service --status-all
Эта команда (которая не так полезна в systemd) может работать, но не всегда даёт полную картину. Она устарела, и её лучше избегать в пользу systemctl
. Лучше использовать systemctl list-units -t service
, так как systemctl
даст более подробную информацию о состоянии службы.
Важное замечание: В современном Debian/systemd service
устаревающая команда. Пользуйтесь systemctl
для большей надёжности и информативности.
Пример удаления файла службы:
sudo rm /etc/systemd/system/<имя_юнита>
Осторожно! Это удаляет только файл конфигурации службы. Служба может и дальше функционировать, если она запущена другим способом (например, через systemd
).
Перед удалением убедитесь, что служба не нужна! Вместо rm
лучше использовать systemctl disable
или systemctl stop
Удалить файл службы из автозапуска (правильно):
sudo systemctl disable <имя_юнита>.service
Эта команда отключает службу от автозапуска при следующей загрузке системы. Она не удаляет файл конфигурации.
Проверка, есть ли служба в автозапуске:
sudo systemctl is-enabled <имя_юнита>.service
Эта команда возвращает enabled
или disabled
, указывая, включена ли служба в автозагрузке.
Добавление службы в автозапуск:
sudo systemctl enable <имя_юнита>.service
Эта команда включает службу в автозапуск при следующей загрузке.
Обратите внимание: Если служба требует каких-то специфических прав (например, запускается от имени суперпользователя, обращается к ресурсам, которые должны быть открытыми только для root), то необходимо убедиться, что у неё есть необходимые права.
Полный пример работы с удалением и добавлением службы в автозапуск:
- Проверка, включена ли служба:
sudo systemctl is-enabled <имя_юнита>.service
- Отключение службы от автозапуска:
sudo systemctl disable <имя_юнита>.service
- Удаление файла конфигурации (только если вы уверены, что не нужен):
sudo rm /etc/systemd/system/<имя_юнита>.service
- Включение службы в автозапуск (если требуется):
sudo systemctl enable <имя_юнита>.service
Важные моменты:
Заменяйте <имя_юнита>
на фактическое имя файла службы, например, my_service.service
Используйте полные имена служб, особенно когда речь идёт о пользовательских службах. systemctl
полезно использовать для автоматизированных операций и получения подробной информации о состоянии служб.
Следуя этим инструкциям, вы сможете безопасно управлять службами в Debian с помощью systemd
. Избегайте использования устаревших команд вроде service --status-all