アプリケーションのグループを起動/再起動/停止するための起動スクリプトを作成しました。私はlib /etc/init.d/functions
スクリプトで。私のシステムではうまく機能していますが、クライアントでは機能しません。彼はエラーを得ています:
そのようなファイルやディレクトリはありません/etc/init.d/functions
今のところ、クライアントがどのLinuxディストリビューションを使用しているかわかりません。それは init.d/functions
ファイルはLinuxディストリビューションによって異なりますか?もしそうなら、どうすればそれを見つけることができますか?
これは、実行しているディストリビューションに固有です。 DebianとUbuntuには/lib/lsb/init-functions
があります。 SuSEには/etc/rc.status
があります。 他のものと互換性のあるものはありません。実際、一部のディストリビューションは/etc/init.d
をまったく使用しないか、互換性のない方法で使用します(SlackwareとArchは最初から思いつきます)私の頭の;他のものがあります)。
CentOS 7 Docker image では、このスクリプトをインストールするには、パッケージinitscripts
をインストールする必要がありました。
yum install -y initscripts
(おかげで docker-library
これにより、私は this commit )を見ました。
それは絶対に分布に依存します。適切に一致するinitスクリプトを作成するには、ディストリビューションを見つける必要があります。
また、LSB(Linux Standard Base)仕様に準拠して、問題のディストリビューションがそうしたことも期待できます。現在の仕様では、標準のinitスクリプト関数を/lib/lsb/init-functions
( こちらのドキュメントを参照 )として使用できるようになっています。 Fedoraおよびその他のRed Hat関連のディストリビューションでは、redhat-lsb
パッケージによって提供されます。これはoptionalです。
だから、あなたは本当にあなたが対象としているものを理解する必要があります。ごめんなさい。
最近の回答の追加
別の回答で述べたように、Linux Standard Base(LSB)仕様は、プラットフォームに依存しない_init.d
_ベースの起動スクリプトを、LSBで定義されたinit関数を使用して、以下のように記述する方法を提供します here
すべてのLSB準拠ディストリビューション(すべての大きなディストリビューション)は、メタパッケージ_/lib/lsb/init-functions
_にファイル_lsb-core-noarch
_(リストされた関数を定義)を提供します。これは、ディストリビューションのパッケージマネージャー_$PKGMAN $INSTOPT lsb-core-noarch
_( yum
、dnf
、apt
、...)。
このような初期化スクリプトの例は this です。
ただし、どのようにsystemd
がほとんどのディストリビューションの事実上のシステムおよびサービスマネージャーであるかを考えると、initscript
ではなく_systemd service unit
_を記述する方が適切です。
Ubuntuに移動したときにこれらの関数を見逃していたため、機能を再作成するライブラリ efunctions を作成しました。
Dockerコンテナーを実行しているときにも、同じエラーが発生しました。私のDockerfileに以下の行を追加することで修正されました
RUN yum install -y initscripts