Linux 的 /etc/init.d-符号链接、硬链接还是实际文件?

Linux 的 /etc/init.d-符号链接、硬链接还是实际文件?

我有一个 Debian 和一个 RPM 包,需要将启动/停止脚本添加到 /etc/init.d 目录中。最近,一位远程开发人员告诉我,“知情人士”知道“最佳实践”是实际将启动程序安装在 /etc/init.d 目录中,而不是使用符号链接,尤其是当包可以安装在不同的分区上时。我一直使用符号链接。“ls -la”显示很多包都使用符号链接。

有没有 Unix/Linux 专家可以给出明确的答案,说明 /etc/init.d 目录中启动脚本的最佳实践是什么。最佳实践是符号链接、硬链接、实际文件,还是这真的很重要?

如果你能引用来源就更好了。我已经用谷歌搜索过这个主题,但找不到答案。

答案1

LSB 标准 (https://refspecs.linuxbase.org/LSB_2.1.0/LSB-generic/LSB-generic/initsrcinstrm.html)规定 /etc/init.d 脚本可以是符号链接:

An init.d file is installed in /etc/init.d (which may be a symlink 
to another location) . . .

但老实说,我认为我只见过第三方供应商应用程序使用符号链接。

编辑:3.0 规范中的相同措辞(https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-generic/LSB-generic/initsrcinstrm.html

答案2

我见过的 initscritps 的唯一方法是/etc/init.d在每个运行级别的目录中有一个常规文件和指向该文件的符号链接。

从一个位置到另一个位置的符号链接/etc/init.d可以工作。但这不是正常做法。如果链接指向根分区之外,您最终会得到一个很容易被破坏的设置。

我建议/etc/init.d像其他服务一样坚持使用文件。

答案3

我发现 RHEL7 存在不遵循 /etc/init.d/ 中脚本的符号链接的问题,服务无法在启动时启动,并且某些“service XXX start”命令失败。

修复此问题的唯一方法是将文件复制到 init.d 目录中,而不是符号链接。因此,虽然使用符号链接很方便,但直接复制文件可能是一种更好的做法。

相关内容