Где находятся системные модули / сервисы в Ubuntu?

23

Во время поиска я продолжаю находить, что они находятся в / usr / lib / systemd / system / и / etc / systemd / system /. Тем не менее, в моем Ubuntu, первый даже не существует, а другой имеет только несколько служб

bluetooth.target.wants                      default.target.wants           hybrid-sleep.target.wants    shutdown.target.wants
dbus-org.bluez.service                      display-manager.service        multi-user.target.wants      sockets.target.wants
dbus-org.freedesktop.Avahi.service          display-manager.service.wants  network-online.target.wants  suspend.target.wants
dbus-org.freedesktop.ModemManager1.service  getty.target.wants             paths.target.wants           sysinit.target.wants
dbus-org.freedesktop.nm-dispatcher.service  graphical.target.wants         plexmediaserver.service      syslog.service
dbus-org.freedesktop.thermald.service       hibernate.target.wants         printer.target.wants         timers.target.wants

Где остальные?

Когда я запускаю списки модулей systemctl, я вижу так много сервисов, но не знаю, где их найти. Например, где находится мой plexmediaserver.service? Мне нужно знать, потому что это то место, где я хочу разместить свои другие подразделения.

ОК Герландо
источник

Ответы:

33

Все предоставляемые пакетами сервисные файлы обычно находятся в /lib/systemd/system. Например, поиск .serviceв индексе пакета .

От man systemd.unit:

/etc/systemd/system/*
/run/systemd/system/*
/lib/systemd/system/*
...

$XDG_CONFIG_HOME/systemd/user/*
$HOME/.config/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_DATA_HOME/systemd/user/*
$HOME/.local/share/systemd/user/*
/usr/lib/systemd/user/*

Последние предназначены для пользовательских сессий. IIRC Ubuntu 16.04 по-прежнему использует upstart для пользовательских сессий, поэтому эти файлы применимы только после 16.04.

Для конкретной службы, чтобы увидеть, что systemd читает, запустите systemctl status <service>или systemctl show <service>:

$ systemctl show ssh.service | grep Path
FragmentPath=/lib/systemd/system/ssh.service
DropInPaths=/etc/systemd/system/ssh.service.d/override.conf
$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/ssh.service.d
           └─override.conf
   Active: active (running) since Thu 2017-01-26 16:06:53 JST; 21h ago
 Main PID: 948 (sshd)
   CGroup: /system.slice/ssh.service
           └─948 /usr/sbin/sshd -D
Мур
источник
1
Спасибо! Кроме того, где другие? Я хочу знать все места, где будет искать процесс systemd init
OCs Guerlando
1
@GuerlandoOCs смотрите обновление.
Муру
11

Есть хорошие инструменты, чтобы знать, когда вам нужно что-то найти.

Первый locate, который используется для поиска файлов по имени. Он использует предварительно созданный индекс, поэтому он очень быстрый. Однако иногда он пропускает новые файлы, которые не были проиндексированы, или может также пропустить файлы с ограниченными правами. В этом случае быстрая locateкоманда найдет все файлы systemd в Ubuntu:

locate systemd

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

locate systemd | grep plex

Другой инструмент, о findкотором нужно знать, - это поиск в реальном времени определенного каталога для поиска файлов. У него много вариантов. Проверьте man findдетали. Чтобы искать plexmediaserver.serviceгде-нибудь в вашей системе, вы должны использовать:

find / -name plexmediaserver.service

Наконец, в этом случае вы, вероятно, знаете, к какому пакету принадлежит искомый файл. Если вы не уверены в точном названии пакета, вы можете использовать этот синтаксис, чтобы найти весь пакет, содержащий в своем имени «plex»:

dpkg -l '*plex*'

Если вы обнаружите, что интересующий вас пакет называется «plexmediaserver», то вы можете использовать этот синтаксис для вывода списка всех файлов в этом пакете:

dpkg -L plexmediaserver

Опять же, вы можете использовать канал, чтобы отфильтровать результаты только по файлу сервиса, который вы ищете:

dpkg -L plexmediaserver | grep plexmediaserver.service

Теперь вы сможете найти файлы для многих распространенных случаев.

Марк Стосберг
источник