web-dev-qa-db-ja.com

そのようなファイルやディレクトリはありません/etc/init.d/functions

アプリケーションのグループを起動/再起動/停止するための起動スクリプトを作成しました。私はlib /etc/init.d/functionsスクリプトで。私のシステムではうまく機能していますが、クライアントでは機能しません。彼はエラーを得ています:

そのようなファイルやディレクトリはありません/etc/init.d/functions

今のところ、クライアントがどのLinuxディストリビューションを使用しているかわかりません。それは init.d/functionsファイルはLinuxディストリビューションによって異なりますか?もしそうなら、どうすればそれを見つけることができますか?

22
tecman

これは、実行しているディストリビューションに固有です。 DebianとUbuntuには/lib/lsb/init-functionsがあります。 SuSEには/etc/rc.statusがあります。 他のものと互換性のあるものはありません。実際、一部のディストリビューションは/etc/init.dをまったく使用しないか、互換性のない方法で使用します(SlackwareとArchは最初から思いつきます)私の頭の;他のものがあります)。

24
geekosaur

CentOS 7 Docker image では、このスクリプトをインストールするには、パッケージinitscriptsをインストールする必要がありました。

yum install -y initscripts

(おかげで docker-library これにより、私は this commit )を見ました。

16
Anthony O.

それは絶対に分布に依存します。適切に一致するinitスクリプトを作成するには、ディストリビューションを見つける必要があります。

また、LSB(Linux Standard Base)仕様に準拠して、問題のディストリビューションがそうしたことも期待できます。現在の仕様では、標準のinitスクリプト関数を/lib/lsb/init-functionsこちらのドキュメントを参照 )として使用できるようになっています。 Fedoraおよびその他のRed Hat関連のディストリビューションでは、redhat-lsbパッケージによって提供されます。これはoptionalです。

だから、あなたは本当にあなたが対象としているものを理解する必要があります。ごめんなさい。

12
mattdm

最近の回答の追加

別の回答で述べたように、Linux Standard Base(LSB)仕様は、プラットフォームに依存しない_init.d_ベースの起動スクリプトを、LSBで定義されたinit関数を使用して、以下のように記述する方法を提供します here

すべてのLSB準拠ディストリビューション(すべての大きなディストリビューション)は、メタパッケージ_/lib/lsb/init-functions_にファイル_lsb-core-noarch_(リストされた関数を定義)を提供します。これは、ディストリビューションのパッケージマネージャー_$PKGMAN $INSTOPT lsb-core-noarch_( yumdnfapt、...)。

このような初期化スクリプトの例は this です。

ただし、どのようにsystemdがほとんどのディストリビューションの事実上のシステムおよびサービスマネージャーであるかを考えると、initscriptではなく_systemd service unit_を記述する方が適切です。

1
Samveen

Ubuntuに移動したときにこれらの関数を見逃していたため、機能を再作成するライブラリ efunctions を作成しました。

0
Marcus Downing

Dockerコンテナーを実行しているときにも、同じエラーが発生しました。私のDockerfileに以下の行を追加することで修正されました

RUN yum install -y initscripts