我正在尝试使用 systemd 测试该BindPaths=
指令在 Debian 8 系统上的工作原理。
目前我有一个服务的基本单元文件:
[Unit]
Description="Simple Test Service"
BindPaths=/path:/bindmount/path:norbind
[Service]
ExecStart=/usr/bin/long_running_program --flags
Restart=always
[Install]
WantedBy=multi-user.target
当我在findmnt
启动服务之前和之后运行时,我/bindmount/path
根本看不到列出的绑定安装。
当我ls
或ls -a
绑定安装位置时/bindmount/path
,我没有看到/path
.
为什么这没有按预期工作?
此选项仅适用于系统服务,并且不支持在服务管理器的每用户实例中运行的服务。
我如何知道我是在服务管理器的每用户实例中运行还是在运行系统服务?是否基于我的服务是否位于/etc/systemd/system
vs中/lib/systemd/system
?
答案1
该BindPaths
选项使文件对设备运行的进程可见。从您键入命令来启动服务的 shell 中根本看不到这一点。您可以随时检查安装了哪些文件系统/proc/mounts
,但是如果您使用 BindPaths 运行服务,我认为检查文件系统是否正确安装的唯一方法是检查/proc/
服务pid/mounts
。后者是该进程已安装的文件系统的列表。
关于您的最后一个问题:/lib/systemd/system
包含所有正常单元文件,同时/etc/systemd/system
包含自定义单元文件和单元之间的所有依赖关系。每个用户实例与systemctl --user
主目录树中的单元文件一起运行并引用单元文件。