web-dev-qa-db-ja.com

Linuxサービスの起動/起動順序を変更する方法は?

タイトルから明らかな質問ですが、Linuxサービスの起動/起動順序を変更するにはどうすればよいですか?

14
Gnanam

/etc/rcX.d/の下のシンボリックリンクの名前を変更して、順序を変更できます。ここで、xは実行レベルです。

SxxまたはKxxで始まる一連のファイルが表示されます。 Sリンクは起動時にトレースされ、Kリンクはシャットダウンのために解析されます。ここのxxは注文を表します。

ただし、この順序は理由で設定されているため、変更する場合は注意してください。 ntpdは、ネットワークサブシステムが初期化された後にのみ起動する必要があります。

11
rags

他の回答で提案されているように手動で行う代わりに、initスクリプトを変更することもできます。ヘッダーにそのような行を追加するだけです:

# chkconfig: 35 90 10

これはchkconfigに、ランレベル3と5にサービスを追加するように指示します。開始位置は90、キル位置は10です。

21
Christian

runlevels and rc.d ディレクトリについて少し読みたいと思います。 rc.dディレクトリ内には、S20Apache K10ApacheのようなSおよびKリンクがあります。これは、基本的にスクリプトの起動/シャットダウンを命令するものです。

このアーキテクチャにはいくつかの変更が加えられていますが、ほとんどのLinuxはまだそれを使用しています。

7
coredump

ここに到着した場合、2つのサービスがあり、一方が他方に依存している可能性がありますが、それらが間違った順序で開始しているため、依存関係のあるサービスが開始に失敗しています。シンボリックリンクの編集に関する提案は、起動シーケンスの実行方法を示すという点で参考情報であり、誰かがサービスに対して「chkconfig on」を実行するまで問題なく機能し、その時点でシンボリックリンクは元のとおりに再作成されます。本当に、この問題はinitスクリプトレベルで処理したいと考えています。また、さまざまなランレベルで一貫しています。回答4で提案されているように、「#chkconfig」行を追加する必要はおそらくないでしょう。すでに同じ行があるはずです。

MySQLデータベースバックエンド(mysqld)でOpenldap(slapd)を実行するサーバーの例を使用します。そのペアを構成することと、その理由については、まったく別の話です。

ブート時に、OpenldapはMySQLに依存しているため、起動に失敗し、起動シーケンスはそれより前に起動しようとします-slapdの位置は27、mysqldの位置は64です。

/etc/rc3.d/内の関連するシンボリックリンクは

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

2つのinitスクリプトで設定された値を探します。

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

/etc/rc.d/init.d/slapdのchkconfig行を編集して、開始位置を/etc/rc.d/init.d/mysqldの開始位置よりも高くします(85を選択しました)。

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

「chkconfig slapd on」を実行して、シンボリックリンクを再確認します

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

これで、このサーバーが起動すると、mysqldがslapdの前に起動し、すべてが正常です。

7
Jim Smyth