ExecStartPre 和 mount 命令 (Linux/Debian)

ExecStartPre 和 mount 命令 (Linux/Debian)

我有一个自定义服务包,在 Debian10 上运行良好。我想在 Debian11 或 Ubuntu 22 上运行它,但 ExecStartPre 中的挂载命令不起作用。或者更好的是,它们执行时没有错误,但没有挂载点。当我手动执行挂载命令然后启动服务时,它看起来不错。但是当服务器重新启动时,由于缺少挂载点,服务无法启动。以下是文件中的一小段代码:

[Service]
...
ExecStartPre=-mount -o bind,ro /etc/myservice /chroot/%i/etc/myservice.d
ExecStart=/usr/sbin/myservice-%i -n -f /etc/myservice.d/myservice-%i.conf
....

知道为什么 mount 命令会被忽略吗?

编辑:

它与 systemd 245.4-4ubuntu3.18 配合良好,但当我升级到 249.11-0ubuntu3.4 时,我无法再挂载。命令的退出代码为“status=0/SUCCESS”。调试模式报告的条目比以前版本的 systemd 多(不确定日志记录是否已扩展)

Sep 29 15:44:48 myhostname systemd[18647]: Bind-mounting / on /run/systemd/unit-root (MS_BIND|MS_REC "")...
Sep 29 15:44:48 myhostname systemd[18647]: Applying namespace mount on /run/systemd/unit-root/run/credentials
Sep 29 15:44:48 myhostname systemd[18647]: Successfully unmounted /run/systemd/unit-root/run/credentials/systemd-sysusers.service
Sep 29 15:44:48 myhostname systemd[18647]: Bind-mounting /run/systemd/inaccessible/dir on /run/systemd/unit-root/run/credentials (MS_BIND|MS_REC "")...
Sep 29 15:44:48 myhostname systemd[18647]: Successfully mounted /run/systemd/inaccessible/dir to /run/systemd/unit-root/run/credentials
Sep 29 15:44:48 myhostname systemd[18647]: Applying namespace mount on /run/systemd/unit-root/run/systemd/incoming
Sep 29 15:44:48 myhostname systemd[18647]: Followed source symlinks /run/systemd/propagate/myservice → /run/systemd/propagate/myservice.
Sep 29 15:44:48 myhostname systemd[18647]: Bind-mounting /run/systemd/propagate/myservice on /run/systemd/unit-root/run/systemd/incoming (MS_BIND "")...
Sep 29 15:44:48 myhostname systemd[18647]: Successfully mounted /run/systemd/propagate/myservice to /run/systemd/unit-root/run/systemd/incoming
Sep 29 15:44:48 myhostname systemd[18647]: Remounted /run/systemd/unit-root/run/credentials.
Sep 29 15:44:48 myhostname systemd[18647]: Remounted /run/systemd/unit-root/run/systemd/incoming.
Sep 29 15:44:48 myhostname systemd[18647]: Remounted /run/systemd/unit-root/run/credentials

基本文件夹结构是使用 jailtool 创建的,这是旧包,但我尝试使用 jailkit 进行相同操作,结果相同。

服务的启动/重启/停止均由 root 用户完成。

答案1

最后我必须将 MountAPIVFS 定义为 false 才能够看到挂载点。

答案2

systemctl status您在该服务的输出中看到 mount 命令的什么状态或错误代码?

您的服务是否切换到其他用户,以至于 mount 命令无法以所需的 (root?) 权限运行?在这种情况下,您可以在命令前加上ExecStartPre“+”符号,如下所示:

ExecStartPre=+/sbin/mount -o bind,ro /etc/myservice /chroot/%i/etc/myservice.d

相关内容