Answers:
它特定于您正在运行的任何发行版。Debian和Ubuntu有/lib/lsb/init-functions
; SuSE有/etc/rc.status
; 它们都不与其他人兼容。 实际上,有些发行版本根本不使用/etc/init.d
或以不兼容的方式使用它(Slackware和Arch出现在我头上;还有其他)。
/etc/init.d/functions
不存在。每个发行版都有自己的规则/etc/init.d
,并且其功能库(如果有)围绕这些规则。例如SuSE的rc_status -s
。有一些LSB“标准”功能,应该在中找到/lib/lsb/init-functions
,但是您的客户端可能没有运行已更新为提供此功能的发行版。
在CentOS 7 Docker映像中,我只需要简单地安装软件包即可安装initscripts
此脚本:
yum install -y initscripts
(由于这个问题docker-library
使我着眼于此提交)
dnf
代替yum
当然)。谢谢!
添加最近的答案
作为另一个答案指出,Linux标准基础(LSB)规范提供了一种方式来写独立于平台的init.d
基于启动脚本,使用LSB定义初始化函数为上市这里
所有LSB兼容的分布(所有大的)提供的文件/lib/lsb/init-functions
中的元包(它定义所列出的功能)lsb-core-noarch
,可以使用发行版的包管理器进行安装$PKGMAN $INSTOPT lsb-core-noarch
(yum
,dnf
,apt
,...)。
这样的初始化脚本的一个示例是this。
但是,考虑systemd
到大多数发行版的事实系统和服务管理器现在情况如何,最好写一个systemd service unit
而不是写一个initscript
。
移至Ubuntu时,我错过了这些功能,因此我创建了一个库来重新创建其功能:efunctions。
运行docker容器时我也遇到了相同的错误。通过在我的Dockerfile中添加以下行进行修复
RUN yum install -y initscripts