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 list-units时,我看到了很多服务,但是我不知道在哪里找到它们。例如,我的plexmediaserver.service在哪里?我需要知道,因为那是我要放置其他单元的地方。

Answers:


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仍在用户会话中使用新贵,因此这些文件仅适用于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
谢谢!还有,其他人呢?我想知道系统初始化过程将寻找的所有地方
Guerlando OCs

1
@GuerlandoOCs请参阅更新。
muru

11

有很好的工具可让您随时随地找到所需的信息。

第一个是locate,用于按名称查找文件。它使用一个预先建立的索引,因此非常快。但是,它有时会丢失尚未被索引的新文件,或者也可能会丢失具有限制性权限的文件。在这种情况下,可以使用快速locate命令在Ubuntu上找到所有systemd文件:

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

现在,您将能够找到许多常见情况的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.