在谷歌搜索时,我一直发现它们位于 /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
Run Code Online (Sandbox Code Playgroud)
其他人在哪里?
当我运行 systemctl list-units 时,我看到了很多服务,但我不知道在哪里找到它们。例如,我的 plexmediaserver.service 在哪里?我需要知道,因为那是我想放置其他单位的地方。
mur*_*uru 84
包提供的服务文件通常都位于/lib/systemd/system. 例如,在包索引中搜索.service。
/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/*
Run Code Online (Sandbox Code Playgroud)
后者用于用户会话。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
Run Code Online (Sandbox Code Playgroud)
Mar*_*erg 16
每当您需要定位某些东西时,都有一些很好的工具可供了解。
第一个是locate,用于按名称定位文件。它使用预先构建的索引,因此速度非常快。但是,它有时会遗漏尚未编入索引的新文件,或者也可能会遗漏具有限制性权限的文件。在这种情况下,一个快速locate命令会找到 Ubuntu 上的所有 systemd 文件:
locate systemd
Run Code Online (Sandbox Code Playgroud)
如果您想专注于该 Plex 文件,可以使用管道过滤结果:
locate systemd | grep plex
Run Code Online (Sandbox Code Playgroud)
另一个需要了解的工具是find,它会实时搜索特定目录以查找文件。它有很多选择。检查man find详细信息。要查找plexmediaserver.service系统上的任何位置,您可以使用:
find / -name plexmediaserver.service
Run Code Online (Sandbox Code Playgroud)
最后,在这种情况下,您可能知道要查找的文件属于哪个包。如果您不确定确切的包名称,可以使用以下语法查找名称中包含“plex”的所有包:
dpkg -l '*plex*'
Run Code Online (Sandbox Code Playgroud)
如果您发现您感兴趣的包名为“plexmediaserver”,那么您可以使用以下语法列出该包中的所有文件:
dpkg -L plexmediaserver
Run Code Online (Sandbox Code Playgroud)
同样,您可以使用管道将结果过滤为您正在查找的服务文件:
dpkg -L plexmediaserver | grep plexmediaserver.service
Run Code Online (Sandbox Code Playgroud)
现在,您将能够找到许多常见情况的文件。
sma*_*c89 10
使用systemd-analyze命令:
可以包含用户服务的所有文件夹:
systemd-analyze --user unit-paths
Run Code Online (Sandbox Code Playgroud)
我更喜欢systemd-analyze --global unit-paths
所有可以包含系统服务的文件夹:
systemd-analyze --system unit-paths
Run Code Online (Sandbox Code Playgroud)
请参阅:联机帮助页
| 归档时间: |
|
| 查看次数: |
183693 次 |
| 最近记录: |