にファイルを作成し/etc/rc0.d
、 という名前を付けましたrc.local
。
このファイルには、私が入れた別のファイルを実行する行を追加しましたDesktop
。起動時にコマンドを実行できるようにするために、これらすべてを実行しました。この記事の指示(最初の方法) ですが、何も機能しないようです。
なぜこれが機能しないのでしょうか?
答え1
/etc/rc.d/
リンク先の手順で言及されているのは、主に歴史的なディレクトリであり、かつてはすべての起動スクリプト ディレクトリをグループ化するために使用されていました。 、 などがありました/etc/rc.d/init.d/
。最近のディストリビューションのほとんどは、ずっと以前から ディレクトリ/etc/rc.d/rc0.d/
を省略し、他のディレクトリを の直下に配置することを/etc/rc.d/rc1.d
選択しています。rc.d
/etc/
/etc/rc0.d/
スクリプトへのシンボリックリンクが含まれているはずです(スクリプトの実際の場所は です/etc/init.d/
)。システムのシャットダウンまたは電源オフ。
/etc/rc6.d/
は、次の場所で実行されるスクリプトへのリンクです。リブート(つまり、カーネルのアップデートをインストールした後など、システムをシャットダウンしてすぐに再起動する場合)。
スクリプトへのリンクに最適なディレクトリは、システム構成とシステムのデフォルトのランレベル (SysVinit を使用している場合) に応じて、またはになります/etc/rc3.d/
。Debian/etc/rc5.d/
ベースの Linux ディストリビューションでは、通常、通常のマルチユーザー状態 (従来の SysVinit を想定) にランレベル 3 を使用しますが、RedHat/Fedora ベースのディストリビューションでは、GUI ログインが有効になっているマルチユーザー状態にランレベル 5 を使用し、ローカル X11 GUI サブシステムが無効になっているマルチユーザー状態にランレベル 3 を使用します。
ディレクトリ内のシンボリック リンクの名前は、/etc/rc?.d/
大文字の S または大文字の K で始まり、その後に (通常は) 2 桁の数字が続きます。この数字は、そのディレクトリ内の他のリンクの中でのスクリプトの起動順序の相対的な位置を示します。大文字の S を使用すると、システムはリンクされたスクリプトをコマンド ライン パラメータを使用して実行しstart
、K を使用すると、代わりにパラメータがstop
使用されます。
したがって、スクリプトは に配置され/etc/init.d/rc.local
、次のように 1 つまたは両方のシンボリック リンクが作成されている必要があります。
ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
ln -s /etc/init.d/rc.local /etc/rc5.d/S99rc.local
しかし、それだけではありません!
最近のLinuxディストリビューションは、 の代わりに古典的なSysVinitを使用しているものでもsystemd
、さまざまなシステム起動タスクを厳密に1つずつ実行するのではなく、さまざまなソリューションを使用して並列実行します。これは、最新のマルチコアCPUでは、並列化によって起動プロセスが大幅に高速化されるためです。この場合、スクリプトの先頭に特定の形式のコメントブロックを追加して、スクリプトが依存するシステムサービスを定義する必要があります。そうしないと、並列化ロジックによってスクリプトが実行される可能性があります。あまりにも早く必要なシステム サービスが最初に開始される前に、
ディストリビューションが を使用する場合、適切な依存関係定義を追加しない限り、一部のディストリビューションの「工場出荷時のデフォルト」のデフォルトでさえ起動プロセスのかなり早い段階で実行されるためsystemd
、これは特に重要です。rc.local
見るhttp://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.htmlSysVinit スタイルの起動/シャットダウン スクリプトに推奨されるコメント ブロックの現在の仕様。
簡単に言えば、スクリプトの冒頭に次のような記述をすると良いでしょうrc.local
。
### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: run locally-configured start-up commands
### END INIT INFO
私の意見では、方法1はリンクした手順不完全で古いアドバイスが含まれています。他の 2 つの方法は、新しいユーザーにとっては簡単かもしれませんが、特定のディストリビューションでそれらの方法が適用可能かどうかを判断する方法についての説明は含まれていません。