web-dev-qa-db-ja.com

Linux /etc/init.d-シンボリックリンク、ハードリンク、または実際のファイル?

DebianとRPMパッケージがあり、/ etc/init.dディレクトリにstart/stopスクリプトを追加する必要があります。最近、リモート開発者から、「ベストプラクティス」は、特にパッケージがインストールされている可能性がある場合、シンボリックリンクを使用するのではなく、/ etc/init.dディレクトリに起動を実際にインストールすることであることがわかっているという通知を受けました。別のパーティション。私はいつもシンボリックリンクを使ってきました。 "ls -la"は、多くのパッケージがシンボリックリンクを使用していることを示します。

nix/Linuxの第一人者が/etc/init.dディレクトリ内の起動スクリプトに関するベストプラクティスについて決定的な回答を提供できるかどうか。ベストプラクティスは、シンボリックリンク、ハードリンク、実際のファイルですか。それは本当に重要ですか?

出典を挙げていただければ幸いです。私はこのトピックをググっていますが、答えを見つけることができません。

5
user2569618

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

3
Brandon Xavier

私がこれまでにinitscritpsを実行したのを見た唯一の方法は、/etc/init.dに通常のファイルを置き、各ランレベルのディレクトリにそのファイルへのシンボリックリンクを作成することです。

/etc/init.dから別の場所へのシンボリックリンクが機能する可能性があります。しかし、それは通常の習慣ではありません。リンクがルートパーティションの外を指している場合、簡単に壊れる設定になってしまいます。

他のサービスと同様に、/etc/init.dのファイルを使用することをお勧めします。

3
kasperd

/etc/init.d/のスクリプトへのシンボリックリンクをたどらないRHEL7で問題が発生しました。起動時にサービスが開始されず、一部の「service XXX start」コマンドが失敗しました。

これを修正する唯一の方法は、ファイルをシンボリックリンクの代わりにinit.dディレクトリにコピーすることでした。そのため、ファイルを直接コピーするシンボリックリンクを使用するのが便利ですが、おそらくより良い方法です。

3
Brett Dalton