所以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挂载选项的所有挂载点。
所以我的修复是做下面的事情
/etc/fstab为我的/ opt挂载点提供x-initrd.mount选项 / dev / mapper / rootvg-opt / opt ext4 nodev, x-initrd.mount 0 0
/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”
grub2-mkconfig -o /boot/grub2/grub.conf
dracut -f
这些步骤结合在一起导致SystemD在启动的早期正确安装/ opt,并使用systemd-sysv-generator成功完成