/etc/rc.localと/etc/init.d/rc.localの違いは何ですか?


30

私は永久的な追加したいiptables私の新しいにルールをVPS、および簡単な後に私は、このルールを追加することができる2つの場所があることに驚いた検索Googleで、同じように思えること:/etc/rc.local/etc/init.d/rc.local。たぶん、誰かが単純なスタートアップコードを置くための2つの場所がなぜあるのか知っていますか?Linuxフレーバー固有ですか(ただし、ubuntuには両方があります!)?または、それらの1つは非推奨ですか?


1
一方は他方へのシンボリックリンクである必要があります。
イグナシオバスケス-エイブラムス

2
@ IgnacioVazquez-Abrams Ubuntu Server 12.04 x86 LTSでは、これらは完全に異なります
。-grigoryvp

1
@ IgnacioVazquez-Abrams:Debianでは、それらも異なっているようです。
エマニュエルベルク

3
ワースチェックアウト:私は尋ねた質問をについて/etc/rc.localしばらく前に。
エマニュエルベルク

回答:


31

/etc/init.dsysvinitのものとの後方互換性のためにubuntu上で維持されます。実際に見ると、/etc/init.d/rc.local(12.04 LTSサーバーからも)表示されます:

#! /bin/sh
### BEGIN INIT INFORMATION
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

そして、「/ etc / rc.localを実行する」がまさにそれです。全体/etc/rc.localは次のとおりです。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

これを行う目的は、stop | startサービスに対処することなく、ブート時に実行するシェルコマンドを配置するための非常にシンプルな場所を提供することだと思います/etc/init.d/rc.local

したがって、実際にはサービスであり、そのように実行できます。とにecho行を追加しました/etc/rc.local

»service rc.local start
hello world

ただし、upstartの/etc/init(init.d!ではない)ディレクトリ内の何かによって参照されているとは思わない:

»initctl start rc.local
initctl: Unknown job: rc.local

upstartにはいくつかの「rc」サービスがあります。

»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting

しかし、それらのどれもrc.localとは関係がないようです。


5

これは、ディストリビューション固有のものです。(たとえば、CentOSで別のrc.localを見つけることはできません)。

あなたの実際の質問に来て、/ etc / init.d / rc.local内に何かを追加すると「サービス」として起動するのに対し、/ etc / rc.local内にあるものはブート時にそのスクリプトを起動するだけだと思います。

Ubuntuがなぜ両方を維持しているのか本当に分かりませんか?(おそらく他の誰かがこの部分に光を当てるかもしれません!!)


「サービスとして」実行されるコマンドと「ブート時に単に起動される」コードの違いは何ですか?それはセキュリティですか?
grigoryvp

この2つの主要な違いは、本質的にサービスとプロセスにあります。;)基本的な意図はセキュリティのみだと思います。このリンクは面白いかもしれません:unixmen.com/managing-your-services-and-processes-in-linux
pragmatic

これは間違っています!彼らは、同じスクリプトではありませんが、ある一つのサービス- /etc/init.d/rc.localんの停止開始のもの/etc/rc.local(詳細は私の答えを参照してください)。
goldilocks

@goldilocks:非常に説明的で徹底的な回答をありがとう。一方をサービスとして言うと、「開始」と「停止」を行うことができ、もう一方は単なるプロセスとして実行できます。ここで意味が分からない場合は修正してください。
実用的な

2
@pragmatic /etc/rc.localスクリプトは、スクリプトによって管理される実行可能プロセスであるため、/etc/initd/rc.local(たとえば)/bin/syslogによって管理される実行可能プロセスと同様/etc/initd/syslogです。明示的に、これ/etc/rc.localは単なるブートスクリプトであり/etc/initd/rc.local、完全に独立した実行レベルサービスであると言います。
goldilocks
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.