没有这样的文件或目录/etc/init.d/functions


21

我创建了一个启动脚本来启动/重新启动/停止一组应用程序。我/etc/init.d/functions在脚本中使用了lib 。它在我的系统上运行良好,但不适用于我的客户;他得到了错误:

没有这样的文件或目录/etc/init.d/functions

现在我不知道我的客户端使用哪个Linux发行版。是init.d/functions针对不同的Linux发行版的文件有什么不同?如果是这样,我如何找到它?


请注意,此错误也可能是Windows行尾引起的。
艾默生·罗沙

Answers:


24

它特定于您正在运行的任何发行版。Debian和Ubuntu有/lib/lsb/init-functions; SuSE有/etc/rc.status; 它们都不与其他人兼容。 实际上,有些发行版本根本不使用/etc/init.d或以不兼容的方式使用它(Slackware和Arch出现在我头上;还有其他)。


我能知道哪个文件以及Redhat 5.5的文件在哪里吗?
tecman 2011年

另外,如何找到这些文件名和路径?有什么方法可以做到吗?还是只能从文档中找到它?
tecman 2011年

我通过查看来做到这一点,因为我有两个可用的东西。我没有安装Red Hat。但是您可能已经错过了我上面粗体显示的重要性:您的功能在其他发行版中/etc/init.d/functions 不存在。每个发行版都有自己的规则/etc/init.d,并且其功能库(如果有)围绕这些规则。例如SuSE的rc_status -s。有一些LSB“标准”功能,应该在中找到/lib/lsb/init-functions,但是您的客户端可能没有运行已更新为提供此功能的发行版。
geekosaur 2011年

15

CentOS 7 Docker映像中,我只需要简单地安装软件包即可安装initscripts此脚本:

yum install -y initscripts

(由于这个问题docker-library使我着眼于此提交


这解决了我在Docker容器中的Fedora 24上使用Jenkins的问题。(仅用于dnf代替yum当然)。谢谢!
geerlingguy

当将MarkLogic 9安装到Centos7泊坞容器中时,这也起作用。安装文档仅提到需要lib.so.6和lsb-core-amd64,但是我猜是因为他们正在谈论在完整的CentOS 7安装上进行安装,所以他们会忽略您需要initscripts软件包的情况。
alc6379

12

那是绝对依赖于分布的。您真的需要找出发行版才能编写适当匹配的init脚本。

您也可以遵循LSB(Linux标准库)规范,并希望有问题的发行版也这样做。当前规范要求标准的init脚本功能可用/lib/lsb/init-functions请参见此处的文档)。在Fedora和其他与Red Hat相关的发行版中,该redhat-lsb软件包提供了此软件包,它是可选的

因此,您实际上必须弄清楚您的目标是什么。抱歉。


1

添加最近的答案

作为另一个答案指出,Linux标准基础(LSB)规范提供了一种方式来写独立于平台的init.d基于启动脚本,使用LSB定义初始化函数为上市这里

所有LSB兼容的分布(所有大的)提供的文件/lib/lsb/init-functions中的元包(它定义所列出的功能)lsb-core-noarch,可以使用发行版的包管理器进行安装$PKGMAN $INSTOPT lsb-core-noarchyumdnfapt,...)。

这样的初始化脚本的一个示例是this

但是,考虑systemd到大多数发行版的事实系统和服务管理器现在情况如何,最好写一个systemd service unit而不是写一个initscript



0

运行docker容器时我也遇到了相同的错误。通过在我的Dockerfile中添加以下行进行修复

RUN yum install -y initscripts
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.