解決策 1:
他の回答で示唆されているように、手動で行う代わりに、init スクリプトを変更することもできます。そのような行をヘッダーに追加するだけです:
# chkconfig: 35 90 10
これは chkconfig
を指示します サービスをランレベル 3 と 5 に追加します。開始位置は 90、停止位置は 10 です。
解決策 2:
/etc/rcX.d/ の下のシンボリックリンクの名前を変更することで順序を変更できます。x は実行レベルになります。
Sxx または Kxx で始まる一連のファイルが表示されます。 S リンクは起動時にトレースされ、K リンクはシャットダウンのために解析されます。ここの xx は順序を表します。
ただし、この順序には理由がありますので、変更するときは注意してください。 ntpd は、ネットワーク サブシステムが初期化された後にのみ開始する必要があります。
解決策 3:
ランレベルと rc.d ディレクトリについて少し読みたいとします。 rc.d ディレクトリ内には、S20apache K10apache のような S リンクと K リンクがあります。これは、基本的にスクリプトの起動/シャットダウンを指示するものです。
このアーキテクチャにはいくつかの変更が加えられていますが、ほとんどの Linux ではまだ使用されています。
解決策 4:
ここにたどり着いた場合は、一方が他方に依存している 2 つのサービスがある可能性がありますが、それらが間違った順序で開始されているため、依存関係のあるサービスが開始されていません。シンボリック リンクの編集に関する提案は、スタートアップ シーケンスがどのように実行されるかを示すという点で有益であり、シンボリック リンクが元のように再作成される時点で、誰かがサービスで "chkconfig on" を実行するまで問題なく機能します。実際には、init スクリプト レベルで問題に対処する必要があります。また、異なるランレベル間で一貫性があります。回答 4 で提案されているように、「# chkconfig」行を追加する必要はおそらくないでしょう。同様の行が既に存在する可能性が高いからです。
MySQL データベース バックエンド (mysqld) で Openldap (slapd) を実行しているサーバーの例を使用します。そのペアを構成することと、なぜそうしたいのかは、まったく別の話です。
Openldap は MySQL に依存しており、起動シーケンスでそれより前に起動しようとするため、起動時に Openldap の起動に失敗します - 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
これで、このサーバーが起動すると、slapd の前に mysqld が起動し、問題なく動作します。