因此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 挂载选项的挂载点。
所以我的解决办法是执行以下操作
- 编辑
/etc/fstab
以使我的 /opt 挂载点具有 x-initrd.mount 选项
/dev/mapper/rootvg-opt /opt ext4 nodev,挂载0 0
- 编辑
/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”
- 重建引导
grub2-mkconfig -o /boot/grub2/grub.conf
dracut -f
这些步骤结合起来使 SystemD 在启动初期正确挂载 /opt 并成功systemd-sysv-generator