SystemD SysV 生成器和挂载

SystemD SysV 生成器和挂载

因此systemd-sysv-generator将旧式 init.d 文件转换为 systemd 服务文件。但它可能在所有挂载都挂载完成之前执行此操作。

我有一些旧的商业软件位于 /opt,这是一个单独的挂载点。它创建了一个从 /etc/init.d/their_service 到 /opt 中文件的符号链接

因此,当服务器启动时,systemd-sysv-generator无法读取链接文件并无法创建服务,从而无法启动服务。

由于旧版软件由另一个团队管理,他们有权自行更新,因此我不想开始将文件从 /opt 中复制出来并替换符号链接。或者更糟的是,尝试自己将其重写为 systemd 服务。

systemd-sysv-generator之后还有什么办法可以灭火吗opt.mount

答案1

一种选择可能是为他们的服务创建一个插件,以指定依赖关系/顺序。

例如:

$ sudo mkdir /etc/systemd/system/their_service.service.d
$ sudo vi /etc/systemd/system/their_service.service.d/50-require_mounts.conf
[Unit]
Wants=network.target remote-fs.target
After=network.target remote-fs.target

不过,可以修改 SysV 脚本来解决这个问题(https://www.freedesktop.org/software/systemd/man/systemd.special.html):

远程文件系统目标 与 local-fs.target 类似,但用于远程挂载点。

systemd 自动将此目标单元的类型为 After= 的依赖项添加到所有 SysV init 脚本服务单元,并带有引用“$remote_fs”设施的 LSB 标头。

答案2

感谢岩席滕比亚格鲁读书https://www.freedesktop.org/software/systemd/man/systemd.special.html我找到了这个部分

初始化文件系统目标

systemd-fstab-generator(3) 自动将 Before= 类型的依赖项添加到 sysroot-usr.mount 以及在 /etc/fstab 中找到的所有具有 x-initrd.mount 且未设置 noauto 挂载选项的挂载点。

所以我的解决办法是执行以下操作

  1. 编辑/etc/fstab以使我的 /opt 挂载点具有 x-initrd.mount 选项

/dev/mapper/rootvg-opt /opt ext4 nodev,挂载0 0

  1. 编辑/etc/default/grub以列出额外的挂载点GRUB_CMDLINE_LINUX

GRUB_CMDLINE_LINUX="rd.lvm.lv=rootvg/根 rd.lvm.lv=rootvg/交换 rd.lvm.lv=rootvg/usrrd.lvm.lv=rootvg/optipv6.disable=1 rhgb quiet”

  1. 重建引导

grub2-mkconfig -o /boot/grub2/grub.conf

dracut -f

这些步骤结合起来使 SystemD 在启动初期正确挂载 /opt 并成功systemd-sysv-generator

相关内容