我正在将基于 sysv 的系统升级到 systemd (CentOS 6 -> 7),并且我想依赖systemd-sysv-generator
运行一些在 /etc/init.d 下仍具有脚本的服务。
问题是,/etc/init.d 下的某些文件实际上是辅助分区上文件的软链接。
运行时,这个分区似乎尚未挂载systemd-sysv-generator
,我在日志中看到的只是一堆来自生成器脚本的“没有这样的文件或目录”错误。Systemd 文档说,生成器运行“启动初期",并且 /etc/fstab 的处理发生得更晚。
我认为我需要做的是以某种方式使 initramfs 或内核挂载辅助驱动器,但我不知道这是否可能。的回应这和这这些问题并不是很令人鼓舞,而且似乎表明这至少是一种非正统的方法。
另一种选择可能是在安装驱动器后重新运行发电机,但我不知道该怎么做,也不知道是否会“太晚”,可以这么说,并且服务将被创建但不会开始了。
我应该怎么办?
编辑:为了使其更具体,假设我的根分区位于/dev/sda1
,并且我有一个辅助分区/dev/sda2
,通常安装为/secondary
。/etc/init.d/myservice
是到 的符号链接/secondary/myservice
。这曾经工作得很好,但由于上述原因在 systemd 下停止工作。
答案1
我会花时间继续systemd
为您的遗留服务一次性创建正确的“.service”文件。这将从整体上简化您的系统,解决您的启动顺序问题并消除稍后的 sysV->systemd 转换。
如果您的旧服务由第三方提供,您可能会发现他们已经发布了systemd
较新版本的 .service 文件,您可以轻松地适应您正在运行的旧版本。
另一种选择是简单地将初始化脚本从第二个分区复制到引导分区。向文件添加注释,以提醒未来的管理员在进行更改时将其复制到第二个位置。
答案2
usr
如果你像对待你的[辅助文件系统]一样,即将它挂载到 initramfs 中,它就会起作用。显然这需要 initramfs 来设置网络。 initramfs 转换相当于守护进程重新加载,但您不会在新的时刻引入其中之一。dracut
对挂载附加文件系统有特定的支持。 ...我特别建议使用 fstab 中的挂载选项x-initrd.mount
来标记挂载,因为 systemd 在这种情况下也应用了一些特殊处理。