Di mana unit / layanan systemd berada di Ubuntu?

23

Saya terus mencari, saat mencari di Google, bahwa mereka berada di / usr / lib / systemd / system / dan / etc / systemd / system /. Namun, di ubuntu saya, yang pertama bahkan tidak ada, dan yang lain hanya memiliki beberapa layanan

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

Dimana yang lainnya?

Ketika saya menjalankan systemctl daftar-unit saya melihat begitu banyak layanan tetapi saya tidak tahu di mana menemukannya. Misalnya, di mana layanan plexmediaserver.service saya? Saya perlu tahu karena di situlah saya ingin menempatkan unit saya yang lain.

Guerlando OCs
sumber

Jawaban:

33

Semua file layanan yang disediakan paket biasanya berada di /lib/systemd/system. Misalnya, cari .servicedi indeks paket .

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

Yang terakhir adalah untuk sesi pengguna. IIRC Ubuntu 16.04 masih menggunakan pemula untuk sesi pengguna, jadi file-file itu hanya berlaku setelah 16,04.

Untuk layanan tertentu, untuk melihat apa yang dibaca systemd, jalankan systemctl status <service>atau 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
sumber
1
Terima kasih! Juga, di mana yang lainnya? Saya ingin tahu semua tempat di mana proses init systemd akan mencari
Guerlando OC
1
@GuerlandoOCs melihat pembaruan.
muru
11

Ada alat yang bagus untuk diketahui kapan pun Anda perlu menemukan sesuatu.

Yang pertama adalah locate, yang digunakan untuk mencari file dengan nama. Ini menggunakan indeks pra-dibangun, jadi ini sangat cepat. Namun, terkadang file-file baru terlewatkan yang belum diindeks, atau mungkin juga kehilangan file dengan izin terbatas. Dalam hal ini, locateperintah cepat akan menemukan semua file systemd di Ubuntu:

locate systemd

Jika Anda ingin fokus pada file Plex itu, Anda bisa menggunakan pipa untuk memfilter hasilnya:

locate systemd | grep plex

Alat lain yang perlu diketahui adalah find, yang melakukan pencarian langsung dari direktori tertentu untuk menemukan file. Ini memiliki banyak pilihan. Periksa man finddetailnya. Untuk mencari di plexmediaserver.servicemana saja di sistem Anda, Anda akan menggunakan:

find / -name plexmediaserver.service

Akhirnya, dalam hal ini, Anda mungkin tahu paket mana yang Anda cari dari file yang Anda cari. Jika Anda tidak yakin dengan nama paket yang tepat, Anda dapat menggunakan sintaks ini untuk menemukan semua paket yang berisi 'plex' dalam namanya:

dpkg -l '*plex*'

Jika Anda menemukan bahwa paket yang Anda minati bernama 'plexmediaserver', maka Anda dapat menggunakan sintaks ini untuk mendaftar semua file dalam paket itu:

dpkg -L plexmediaserver

Sekali lagi, Anda bisa menggunakan pipa untuk memfilter hasil hanya file layanan yang Anda cari:

dpkg -L plexmediaserver | grep plexmediaserver.service

Sekarang Anda dapat menemukan file untuk banyak kasus umum.

Mark Stosberg
sumber