web-dev-qa-db-ja.com

/etc/rc.localの目的と典型的な使用法

ヘッダーは次のようになります。

#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.

このファイルの理由は何ですか(多くは含まれていません)、通常どのようなコマンドを使用しますか? 「マルチユーザーランレベル」とは何ですか? (rcは「コマンドの実行」だと思いますか?)

79
Emanuel Berg

runlevel はシステムの状態であり、システムが起動中、再起動中、シャットダウン中、またはシングルユーザーモードであるか、正常に実行されているかを示します。従来の init プログラムは、対応するランレベルに切り替えることによってこれらのアクションを処理します。 Linuxでは、ランレベル 慣例により

  • 起動中にS、
  • シャットダウン中は0、
  • 6再起動中、
  • シングルユーザーモードの1および
  • 通常の動作では2〜5。

ランレベル2から5は、システム管理者のみを対象としたランレベル1とは異なり、複数のユーザーがログインできるため、マルチユーザーランレベルと呼ばれます。

ランレベルが変更されると、initは rcスクリプト を実行します(従来のinitを備えたシステムでは、 pstartSystemd などの代替手段があります)。これらのrcスクリプトは通常、システムサービスを開始および停止し、ディストリビューションによって提供されます。

スクリプト/etc/rc.localは、システム管理者が使用するためのものです。従来は、すべての通常のシステムサービスが開始された後で、マルチユーザーランレベルに切り替えるプロセスの最後に実行されます。たとえば、/usr/localにインストールされているサーバーなど、カスタムサービスを開始するために使用できます。ほとんどのインストールでは/etc/rc.localは必要ありません。これは、必要な少数のケースのために提供されています。

rcは「実行制御」を示し、

multiuserランレベルは、ネットワークが利用可能なレベルとして定義されるため、サーバーへの接続は、ハードワイヤードコンソール接続の代わりにそれらのサービスを使用して行うことができます。

サーバーは通常、さまざまな名前のサービスプロセッサによって管理されており、ネットワーク接続をサポートしており、ハードワイヤードコンソールのように機能します。

rc.localファイル。これは、開始するすべての「ローカル」(サイト固有の)オブジェクト(デーモンおよび/または一度起動したスクリプト)を指定するのに便利です。このパラダイムを使用するか、実際に「/etc/init.d」に開始/停止スクリプトを適切に入力するかを選択できます。

14
JRFerguson

主に次の2つの目的で使用します。

  1. すべての再起動の日付とカーネルバージョンをログに記録します。詰め物をせずにシステムに簡単に追加できるシンプルなワンライナー...そしてuptimedを実行するよりもブート履歴が破損する傾向がはるかに少ないです。

  2. 数年前までdebianにあった古い/etc/rc.boot/ディレクトリを復活させるため。私はまだinit.dスクリプトとして書き直すのに値しないいくつかの単純なスクリプトを持っています(たとえば、dmesgをrootにメールするQ&Dスクリプト、およびhdaparmを使用してアイドルスピンダウンを無効にし、blockdevをread-に設定するスクリプト先のサイズ)、そして他のすべての起動時スクリプトの後に実行されてうれしいです。

例えば.

echo "$(date +%s),$(date),$(uname -a)"  >> /var/log/reboot.log

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

また、centosとdebianのディストリビューションがopenstackからec2スタイルのメタデータを取得するために、今年初めに/etc/rc.localスクリプトを書きました(http://169.254.169.254/)VMがIP、ホスト名、SSHキー、およびその他のインスタンス固有の情報を取得できるようにします。 cloud-initはこれらのディストリビューションに移植されたため、スクリプトは現在廃止されています。

4
cas

Debianrc.localファイルは、主に非初期スタイルのシステムとの互換性のためです。使用しないでください。

代わりに、ランレベルの変更中に何をしたい場合でも、/etc/init.d/Skeletonを新しいinitスクリプトにコピーし、inservを使用して有効にすることをお勧めします。


更新:以下のコメントのとおり、この回答は推奨されなくなりました。ただし、この回答はスケルトンの廃止前に数年で投稿され、2019年1月現在、そのスケルトンまだ存在はDebianの不安定版にあります。

3
bahamat