Onde estão as unidades / serviços systemd localizados no Ubuntu?

23

Eu continuo descobrindo, enquanto pesquisava, que eles estão localizados em / usr / lib / systemd / system / e / etc / systemd / system /. No entanto, no meu ubuntu, o primeiro nem existe, e o outro possui apenas alguns serviços

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

Onde estão os outros?

Quando executo systemctl list-units, vejo muitos serviços, mas não sei onde localizá-los. Por exemplo, onde está meu plexmediaserver.service? Eu preciso saber porque é onde eu quero colocar minhas outras unidades.

OCs Guerlando
fonte

Respostas:

33

Os arquivos de serviço fornecidos pelo pacote geralmente estão localizados em /lib/systemd/system. Por exemplo, procure .serviceno índice do pacote .

De 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/*

Os últimos são para sessões do usuário. O IIRC Ubuntu 16.04 ainda usa o inicio para as sessões do usuário; portanto, esses arquivos são aplicáveis ​​somente a partir do 16.04.

Para um serviço específico, para ver o que systemd está lendo, execute systemctl status <service>ou 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
muru
fonte
11
Obrigado! Além disso, onde estão os outros? Eu quero saber todos os lugares onde o processo de inicialização do systemd irá procurar
Guerlando OCs
11
@GuerlandoOCs see update.
muru
11

Existem boas ferramentas para você saber sempre que precisar localizar algo.

O primeiro é locate, usado para localizar arquivos por nome. Ele usa um índice pré-criado, por isso é extremamente rápido. No entanto, às vezes falta novos arquivos que não foram indexados ou também pode perder arquivos com permissões restritivas. Nesse caso, um locatecomando rápido encontraria todos os arquivos systemd no Ubuntu:

locate systemd

Se você deseja focar no arquivo Plex, pode usar um canal para filtrar os resultados:

locate systemd | grep plex

A outra ferramenta a conhecer é find, que faz uma pesquisa ao vivo de um diretório específico para encontrar arquivos. Tem muitas opções. Verifique man findpara detalhes. Para procurar em plexmediaserver.servicequalquer lugar do seu sistema, você usaria:

find / -name plexmediaserver.service

Finalmente, nesse caso, você provavelmente sabe a qual pacote pertence o arquivo que está procurando. Se você não tem certeza do nome exato do pacote, pode usar esta sintaxe para encontrar todo o pacote que contém 'plex' em seu nome:

dpkg -l '*plex*'

Se você achar que o pacote que lhe interessa se chama 'plexmediaserver', poderá usar esta sintaxe para listar todos os arquivos desse pacote:

dpkg -L plexmediaserver

Novamente, você pode usar um canal para filtrar os resultados apenas no arquivo de serviço que você está procurando:

dpkg -L plexmediaserver | grep plexmediaserver.service

Agora você poderá encontrar arquivos para muitos casos comuns.

Mark Stosberg
fonte