systemd 忽略来自 overlayFS 的服务

systemd ignores services from overlayFS

我想在另一个分区上构建一个应用程序系统,一个应用程序文件系统。属于应用程序的所有二进制文件、配置文件和服务文件都应该在 app-fs 中。

我使用的是以下版本:内核 4.9.x、systemd v234.

应用分区挂载在/opt,包括以下文件:

/opt/usr/bin/app-binary  
/opt/etc/systemd/system/multiuser.target/link_2_app.service  
/opt/lib/systemd/system/app.service

这是服务文件:

[Unit]
Description=The application description.
After=syslog.target basic.target

[Service]
ExecStart=/opt/usr/bin/app-binary
Type=simple

[Install]
WantedBy=multi-user.target

为了将文件与根文件系统同步,我创建了 2 个叠加层,这可能是 /etc/fstab 条目(抱歉格式问题,一行无效):

/dev/app-partition /opt auto defaults,x-systemd.mount 0 2
overlay /etc overlay defaults,x-systemd.mount, x-systemd.after=opt.mount,lowerdir=/etc,upperdir=/opt/etc,workdir=/work/etc 0 2
overlay /lib/systemd/system overlay defaults,x-systemd.mount,x-systemd.after=opt.mount,lowerdir=/lib/systemd/system,upperdir=/opt/lib/systemd/system,workdir=/work/lib 0 2

这是在到达 local-fs.target 之前处理的。

结果

我可以成功启动应用程序,但使用 systemctl start 手动启动 app.service。 "systemctl status app.service" 的状态表示已启用。但该应用程序未在启动时启动。 Systemd 不会给出有关尝试启动应用程序的消息。

问题

有没有办法调试这种行为?系统什么时候检查服务文件?有没有办法再次触发它?是否有其他方法可以使用 systemd 处理此用例?

systemd 在启动时检查单元文件一次,在 systemd 启动之前创建 overlayFS 的初始化脚本可以处理这个用例。

另一个想法(但未测试)是:systemctl daemon-reload

systemctl daemon-reload

我测试这个不行。

以我的情况。我用systemd-networkd,叠加