SystemD SysV生成器和挂载

所以systemd-sysv-generator将旧式的init.d文件转换成systemd服务文件。 但是在所有的坐骑都被装上之前,它可能会这样做。

我有一些传统的商业软件,它们是/ opt,它是一个单独的挂载点。 它创build一个从/etc/init.d/their_service到/ opt中的文件的符号链接

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

由于传统软件是由另一个团队pipe理的,他们有权力自行更新,所以我不想开始将文件复制出/ opt并replace符号链接。 或者更糟糕的是,请尝试自己将其重写为systemd服务。

opt.mount之后有没有办法让systemd-sysv-generator opt.mount

一种select可能是为他们的服务创build一个插件,它指定了依赖/顺序。

例如:

 $ 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 ):

remote-fs.target类似于local-fs.target,但对于远程挂载点。

systemd会自动为所有SysV init脚本服务单元添加一个types为After =的目标单元的依赖关系,这个服务单元的LSB头部引用了“$ remote_fs”工具。

感谢从iwaseatenbyagrue提示读取https://www.freedesktop.org/software/systemd/man/systemd.special.html我发现这一节

initrd-fs.target

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

所以我的修复是做下面的事情

  1. 编辑/etc/fstab为我的/ opt挂载点提供x-initrd.mount选项

/ dev / mapper / rootvg-opt / opt ext4 nodev, x-initrd.mount 0 0

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

GRUB_CMDLINE_LINUX =“rd.lvm.lv = rootvg / root rd.lvm.lv = rootvg / swap rd.lvm.lv = rootvg / usr rd.lvm.lv = rootvg / opt ipv6.disable = 1 rhgb quiet”

  1. 重build引导

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

dracut -f

这些步骤结合在一起导致SystemD在启动的早期正确安装/ opt,并使用systemd-sysv-generator成功完成