Инструменты пользователя

Инструменты сайта


linux:systemd:managing_linux_services

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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>​
  
  
linux/systemd/managing_linux_services.1683886791.txt.gz · Последние изменения: 2023/05/12 13:19 — werwolf