Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
linux:systemd:managing_linux_services [2023/05/12 13:19] werwolf |
linux:systemd:managing_linux_services [2023/05/12 13:30] (текущий) werwolf [Управление службами пользователей] |
||
|---|---|---|---|
| Строка 103: | Строка 103: | ||
| Сначала давайте посмотрим все загруженные в память службы Linux. Для того чтобы отобразить только службы можно использовать фильтр по типу с помощью опции **type**: | Сначала давайте посмотрим все загруженные в память службы Linux. Для того чтобы отобразить только службы можно использовать фильтр по типу с помощью опции **type**: | ||
| - | ''systemctl list-units --type service'' | + | <code bash> |
| + | systemctl list-units --type service | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-1-919x576.png?919x576}}Обратите внимание, что команда не просто выводит текст, она передает этот текст утилите less. Здесь доступна прокрутка вверх и вниз, а также вправо и влево с помощью клавиш стрелок. Для того чтобы выйти обратно в терминал нажмите клавишу **q**. | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-1-919x576.png?919x576}} \\ |
| + | Обратите внимание, что команда не просто выводит текст, она передает этот текст утилите less. Здесь доступна прокрутка вверх и вниз, а также вправо и влево с помощью клавиш стрелок. Для того чтобы выйти обратно в терминал нажмите клавишу **q**. | ||
| Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Systemd не пересматривает все файлы юнитов при выполнении этой команды. В выводе утилиты есть несколько колонок: | Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Systemd не пересматривает все файлы юнитов при выполнении этой команды. В выводе утилиты есть несколько колонок: | ||
| Строка 116: | Строка 119: | ||
| Дальше больше. Вы можете отфильтровать список служб systemctl по состоянию с помощью опции **state**. Например, только выполняющиеся: | Дальше больше. Вы можете отфильтровать список служб systemctl по состоянию с помощью опции **state**. Например, только выполняющиеся: | ||
| - | ''systemctl list-units --type service --state running'' | + | <code bash> |
| + | systemctl list-units --type service --state running | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-2-919x576.png?919x576}}Или те, которые завершились с ошибкой: | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-2-919x576.png?919x576}} \\ |
| + | Или те, которые завершились с ошибкой: | ||
| - | ''systemctl list-units --type service --state failed'' | + | <code bash> |
| + | systemctl list-units --type service --state failed | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-3-919x576.png?919x576}}Для фильтрации можно брать любое значение состояния из колонки ACTIVE или SUB. | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-3-919x576.png?919x576}} \\ |
| + | Для фильтрации можно брать любое значение состояния из колонки ACTIVE или SUB. | ||
| ==== 2. Список всех служб ==== | ==== 2. Список всех служб ==== | ||
| - | |||
| - | (adsbygoogle = window.adsbygoogle || []).push%%({%%}); | ||
| - | |||
| В предыдущем пункте было показано как посмотреть список служб, которые уже загружены в память systemd. Но для того чтобы посмотреть все службы необходимо обратиться к файлам юнитов, потому что далеко не все службы загружаются в память. | В предыдущем пункте было показано как посмотреть список служб, которые уже загружены в память systemd. Но для того чтобы посмотреть все службы необходимо обратиться к файлам юнитов, потому что далеко не все службы загружаются в память. | ||
| Строка 133: | Строка 139: | ||
| Для этого понадобится команда **list-unit-files**. Например, для вывода вообще всех юнитов воспользуйтесь такой командой: | Для этого понадобится команда **list-unit-files**. Например, для вывода вообще всех юнитов воспользуйтесь такой командой: | ||
| - | ''systemctl list-unit-files'' | + | <code bash> |
| + | systemctl list-unit-files | ||
| + | </code> | ||
| + | |||
| + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-4-919x576.png?919x576}} \\ | ||
| + | Здесь тоже есть несколько колонок с информацией, в первой колонке выводится добавлен ли юнит в автозагрузку, а во второй должен ли он быть добавлен в автозагрузку по умолчанию. Теперь отфильтруем только службы Linux: | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-4-919x576.png?919x576}}Здесь тоже есть несколько колонок с информацией, в первой колонке выводится добавлен ли юнит в автозагрузку, а во второй должен ли он быть добавлен в автозагрузку по умолчанию. Теперь отфильтруем только службы Linux: | ||
| - | ''systemctl list-unit-files --type service'' | + | <code bash> |
| + | systemctl list-unit-files --type service | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-5-919x576.png?919x576}}Здесь вы тоже можете использовать фильтры по состоянию, но значения будут уже другие. Теперь вы знаете как посмотреть запущенные службы Linux. | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-5-919x576.png?919x576}} \\ |
| + | Здесь вы тоже можете использовать фильтры по состоянию, но значения будут уже другие. Теперь вы знаете как посмотреть запущенные службы Linux. | ||
| ==== 3. Поиск службы по имени ==== | ==== 3. Поиск службы по имени ==== | ||
| Строка 145: | Строка 158: | ||
| Если вы хотите найти определенную службу, но не знаете её полное имя, то можете использовать фильтр по паттерну. Например, так можно вывести все службы, которые начинаются со слова mysql: | Если вы хотите найти определенную службу, но не знаете её полное имя, то можете использовать фильтр по паттерну. Например, так можно вывести все службы, которые начинаются со слова mysql: | ||
| - | ''systemctl list-unit-files 'mysql%%*'%%'' | + | <code bash> |
| + | systemctl list-unit-files 'mysql%%*'%%'' | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-6-919x576.png?919x576}}==== 4. Запуск службы ==== | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-6-919x576.png?919x576}} |
| + | ==== 4. Запуск службы ==== | ||
| Для того чтобы запустить службу используется команда **start**. Ей необходимо передать имя службы в качестве параметра: | Для того чтобы запустить службу используется команда **start**. Ей необходимо передать имя службы в качестве параметра: | ||
| - | ''sudo systemctl start имя_службы.service'' | + | <code bash> |
| + | sudo systemctl start имя_службы.service | ||
| + | </code> | ||
| Например, для запуска Nginx выполните: | Например, для запуска Nginx выполните: | ||
| - | ''sudo systemctl start nginx.service'' | + | <code bash> |
| + | sudo systemctl start nginx.service | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-8-919x576.png?919x576}}Причем расширение **service** можно опустить, оно и так подставляется по умолчанию. Если запуск прошел хорошо, программа ничего не выведет. | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-8-919x576.png?919x576}} \\ |
| + | Причем расширение **service** можно опустить, оно и так подставляется по умолчанию. Если запуск прошел хорошо, программа ничего не выведет. | ||
| ==== 5. Остановка службы ==== | ==== 5. Остановка службы ==== | ||
| Строка 163: | Строка 184: | ||
| Остановить службу linux можно командой: | Остановить службу linux можно командой: | ||
| - | ''sudo systemctl stop имя_службы.service'' | + | <code bash> |
| + | sudo systemctl stop имя_службы.service | ||
| + | </code> | ||
| Например, для остановки Nginx можно использовать такую команду: | Например, для остановки Nginx можно использовать такую команду: | ||
| - | ''sudo systemctl stop nginx'' | + | <code bash> |
| + | sudo systemctl stop nginx | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-9-1-919x576.png?919x576}}Кроме того, вы можете остановить несколько сервисов одной командой используя фильтрацию по паттерну. Например, для остановки всех сервисов, имена которых начинаются с php выполните: | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-9-1-919x576.png?919x576}} \\ |
| + | Кроме того, вы можете остановить несколько сервисов одной командой используя фильтрацию по паттерну. Например, для остановки всех сервисов, имена которых начинаются с php выполните: | ||
| - | ''sudo systemctl stop 'php*.service''' | + | <code bash> |
| + | sudo systemctl stop 'php*.service' | ||
| + | </code> | ||
| Но это будет работать только для запущенных служб. Запускать службы таким образом нельзя. Сопоставление по паттерну работает только для заруженных в память юнитов, а поэтому невозможно быть уверенным что список для запуска будет полным. | Но это будет работать только для запущенных служб. Запускать службы таким образом нельзя. Сопоставление по паттерну работает только для заруженных в память юнитов, а поэтому невозможно быть уверенным что список для запуска будет полным. | ||
| Строка 181: | Строка 209: | ||
| Для полной перезагрузки Nginx выполните такую команду: | Для полной перезагрузки Nginx выполните такую команду: | ||
| - | ''sudo systemctl restart nginx'' | + | <code bash> |
| + | sudo systemctl restart nginx | ||
| + | </code> | ||
| Для того чтобы попросить программу перечитать свою конфигурацию используйте команду **reload**: | Для того чтобы попросить программу перечитать свою конфигурацию используйте команду **reload**: | ||
| - | ''sudo systemctl reload nginx'' | + | <code bash> |
| + | sudo systemctl reload nginx | ||
| + | </code> | ||
| Если служба не поддерживает этого, вы получите ошибку. Для того чтобы избежать этого и перезапустить службу полностью если мягкая перезагрузка не поддерживается используйте команду **reload-or-restart**. Например: | Если служба не поддерживает этого, вы получите ошибку. Для того чтобы избежать этого и перезапустить службу полностью если мягкая перезагрузка не поддерживается используйте команду **reload-or-restart**. Например: | ||
| - | ''sudo systemctl reload-or-restart nginx'' | + | <code bash> |
| + | sudo systemctl reload-or-restart nginx | ||
| + | </code> | ||
| ==== 7. Состояние службы ==== | ==== 7. Состояние службы ==== | ||
| Строка 195: | Строка 229: | ||
| Посмотреть состояние службы позволяет команда **status**: | Посмотреть состояние службы позволяет команда **status**: | ||
| - | ''sudo systemctl status имя_службы'' | + | <code bash> |
| + | sudo systemctl status имя_службы | ||
| + | </code> | ||
| Например, для Nginx: | Например, для Nginx: | ||
| - | ''sudo systemctl status nginx'' | + | <code bash> |
| + | sudo systemctl status nginx | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-16-919x576.png?919x576}}Здесь вы можете видеть текущее состояние процесса в поле **Active**. Возможные значения: **active, inactive, failed**, etc. Ещё тут выводится статистика по использованию памяти, количеству запущенных процессов и PID основного процесса. А также 10 последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет. Если этих данных вам не достаточно, то вы можете указать количество строк для вывода используя опцию **--lines**. Например: | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-16-919x576.png?919x576}} \\ |
| - | ''sudo systemctl status --lines=50 avahi-daemon'' | + | Здесь вы можете видеть текущее состояние процесса в поле **Active**. Возможные значения: **active, inactive, failed**, etc. Ещё тут выводится статистика по использованию памяти, количеству запущенных процессов и PID основного процесса. А также 10 последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет. Если этих данных вам не достаточно, то вы можете указать количество строк для вывода используя опцию **--lines**. Например: |
| + | |||
| + | <code bash> | ||
| + | sudo systemctl status --lines=50 avahi-daemon | ||
| + | </code> | ||
| Если на экран не помещается вся строка логов, вы можете использовать стрелки вправо и влево для прокрутки. В некоторых случаях строка может обрезаться по размеру окна терминала. Для того чтобы этого избежать используйте опцию **-l**: | Если на экран не помещается вся строка логов, вы можете использовать стрелки вправо и влево для прокрутки. В некоторых случаях строка может обрезаться по размеру окна терминала. Для того чтобы этого избежать используйте опцию **-l**: | ||
| - | ''sudo systemctl status -l nginx'' | + | <code bash> |
| + | sudo systemctl status -l nginx | ||
| + | </code> | ||
| ==== 8. Автозагрузка службы ==== | ==== 8. Автозагрузка службы ==== | ||
| Строка 213: | Строка 257: | ||
| Для того чтобы добавить службу в автозагрузку используйте команду enable. Например, команда добавления Nginx в автозагрузку будет выглядеть вот так: | Для того чтобы добавить службу в автозагрузку используйте команду enable. Например, команда добавления Nginx в автозагрузку будет выглядеть вот так: | ||
| - | ''sudo systemctl enable nginx'' | + | <code bash> |
| + | sudo systemctl enable nginx | ||
| + | </code> | ||
| А для удаления из автозагрузки используйте команду disable. Например: | А для удаления из автозагрузки используйте команду disable. Например: | ||
| - | ''sudo systemctl disable nginx'' | + | <code bash> |
| + | sudo systemctl disable nginx | ||
| + | </code> | ||
| Более подробно об автозагрузке в Systemd вы можете прочитать в статье [[https://losst.pro/avtozagruzka-servisov-v-ubuntu|Автозагрузка сервисов Linux]]. | Более подробно об автозагрузке в Systemd вы можете прочитать в статье [[https://losst.pro/avtozagruzka-servisov-v-ubuntu|Автозагрузка сервисов Linux]]. | ||
| Строка 227: | Строка 275: | ||
| Вы можете скопировать файл юнита в папку **/etc/systemd/system/** и редактировать его там. Специально для таких случаев была разработана команда **edit**. Если её использовать с опцией **--full** она создаст файл в папке **/etc/systemd%%/*%%** в котором вы можете изменять всё что вам нужно. Например, вы можете выполнить следующую команду для того чтобы отредактировать конфигурационный файл Nginx: | Вы можете скопировать файл юнита в папку **/etc/systemd/system/** и редактировать его там. Специально для таких случаев была разработана команда **edit**. Если её использовать с опцией **--full** она создаст файл в папке **/etc/systemd%%/*%%** в котором вы можете изменять всё что вам нужно. Например, вы можете выполнить следующую команду для того чтобы отредактировать конфигурационный файл Nginx: | ||
| - | ''sudo systemctl edit --full nginx'' | + | <code bash> |
| + | sudo systemctl edit --full nginx | ||
| + | </code> | ||
| Внесите нужные изменения и сохраните файл. Например, можно добавить переменную окружения SITE со значением losst: | Внесите нужные изменения и сохраните файл. Например, можно добавить переменную окружения SITE со значением losst: | ||
| + | <code bash> | ||
| + | Environment="SITE=losst"https://losst.pro/wp-content/uploads/2023/01/services-linux-12-919x576.png | ||
| + | </code> | ||
| - | ''Environment="SITE=losst"https://losst.pro/wp-content/uploads/2023/01/services-linux-12-919x576.png'' | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-11-919x576.png?919x576}} \\ |
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-11-919x576.png?919x576}}Если же вы выполните команду **edit** без опции **--full**, то будет создана папка **/etc/systemd/system/nginx.service.d**, в которой появится файл **override.conf**. Здесь нужно разместить только параметры, которые вы хотите добавить или значения которых нужно переопределить Например, для добавления той же переменной окружения нужно добавить такую строку: | + | Если же вы выполните команду **edit** без опции **--full**, то будет создана папка **/etc/systemd/system/nginx.service.d**, в которой появится файл **override.conf**. Здесь нужно разместить только параметры, которые вы хотите добавить или значения которых нужно переопределить Например, для добавления той же переменной окружения нужно добавить такую строку: |
| - | ''sudo systemctl edit nginx'' ''Envirnoment="SITE=losst"'' | + | <code bash> |
| + | sudo systemctl edit nginx | ||
| + | </code> | ||
| + | <code bash> | ||
| + | Envirnoment="SITE=losst" | ||
| + | </code> | ||
| После внесения изменений необходимо обновить конфигурацию Systemd с диска: | После внесения изменений необходимо обновить конфигурацию Systemd с диска: | ||
| - | ''sudo systemctl daemon-reload'' | + | <code bash> |
| + | sudo systemctl daemon-reload | ||
| + | </code> | ||
| Затем вы можете перезапустить сервис и убедится, что настройки применились. | Затем вы можете перезапустить сервис и убедится, что настройки применились. | ||
| Строка 247: | Строка 307: | ||
| Удалить службу можно удалив пакет, вместе с которым она поставляется. Однако если это стандартная служба, то это сделать не получится. Существует способ отключать юниты, если вы не хотите чтобы кто-то их использовал. Это маскировка. Для этого используйте команду mask: | Удалить службу можно удалив пакет, вместе с которым она поставляется. Однако если это стандартная служба, то это сделать не получится. Существует способ отключать юниты, если вы не хотите чтобы кто-то их использовал. Это маскировка. Для этого используйте команду mask: | ||
| - | ''sudo systemctl mask имя_сервиса'' | + | <code bash> |
| + | sudo systemctl mask имя_сервиса | ||
| + | </code> | ||
| Например, для Nginx: | Например, для Nginx: | ||
| - | ''sudo systemctl mask nginx'' | + | <code bash> |
| + | sudo systemctl mask nginx | ||
| + | </code> | ||
| Эта команда создает в папке **/etc/systemd/system** символическую ссылку на **/dev/null** с именем файла службы, после чего служба считается отключённой. Обратите внимание, что если вы редактировали файл юнита и в папке /etc/systemd/system уже существует его файл, то вы можете получить ошибку Failed to mask unit: File /etc/systemd/system%%/*%%.service already exists. В таком случае все ваши изменения нужно удалить командой revert. При выполнении этой команды ваши изменения будут удалены. Например: | Эта команда создает в папке **/etc/systemd/system** символическую ссылку на **/dev/null** с именем файла службы, после чего служба считается отключённой. Обратите внимание, что если вы редактировали файл юнита и в папке /etc/systemd/system уже существует его файл, то вы можете получить ошибку Failed to mask unit: File /etc/systemd/system%%/*%%.service already exists. В таком случае все ваши изменения нужно удалить командой revert. При выполнении этой команды ваши изменения будут удалены. Например: | ||
| - | ''sudo systemctl revert nginx'' | + | <code bash> |
| + | sudo systemctl revert nginx | ||
| + | </code> | ||
| Информацию о том, что служба замаскирована можно увидеть в выводе команды **status**: | Информацию о том, что служба замаскирована можно увидеть в выводе команды **status**: | ||
| - | ''sudo systemctl status nginx'' | + | <code bash> |
| + | sudo systemctl status nginx | ||
| + | </code> | ||
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-12-919x576.png?919x576}}Для того чтобы вернуть всё как было выполните команду **umask**: | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-12-919x576.png?919x576}} \\ |
| + | Для того чтобы вернуть всё как было выполните команду **umask**: | ||
| - | ''sudo systemctl umask nginx'' | + | <code bash> |
| + | sudo systemctl umask nginx | ||
| + | </code> | ||
| ===== Управление службами пользователей ===== | ===== Управление службами пользователей ===== | ||
| Строка 271: | Строка 342: | ||
| Все команды для управления такими службами аналогичны обычным, только нужно добавить опцию **--user**. Например, для того чтобы получить список всех служб которые могут работать от имени пользователя выполните: | Все команды для управления такими службами аналогичны обычным, только нужно добавить опцию **--user**. Например, для того чтобы получить список всех служб которые могут работать от имени пользователя выполните: | ||
| - | ''systemctl --user list-unit-files --type service'' | + | <code bash> |
| - | + | systemctl --user list-unit-files --type service | |
| - | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-13-919x576.png?919x576}}Для просмотра состояния службы используется команда **status**. Например для службы dbus команда будет выглядеть так: | + | </code> |
| - | (adsbygoogle = window.adsbygoogle || []).push%%({%%}); | + | {{https://losst.pro/wp-content/uploads/2023/01/services-linux-13-919x576.png?919x576}} \\ |
| + | Для просмотра состояния службы используется команда **status**. Например для службы dbus команда будет выглядеть так: | ||
| - | ''systemctl --user status dbus.service'' | + | <code bash> |
| + | systemctl --user status dbus.service | ||
| + | </code> | ||