PUIAS(RedHat)6.4サーバーとデスクトップがたくさんあります。コンピューティングノードを再起動した後(テスト目的でのみ実行)、初期インストール後に手動で開始されたデーモン(ipmi、mcelog、fail2ban)の多くが実行されておらず、手動で再起動する必要があることに気付きました。このサーバーは、実行レベル3(GUIなし)で実行することを想定しています。デスクトップ上の同じOSバージョン(実行レベル5)で同様の演習を行うと、まったく異なる結果が得られます。つまり、すべてのデーモンが適切に起動されます。
これは例外であり、/ etc/init.dスクリプトを編集する必要がありますか、それともサービスを開始するものを書くだけですか?これを行う他の「正しい」方法はありますか?
私はOpenBSDの世界から来ており、ビルドインデーモンは/etc/rc.conf.localを編集することで簡単に見つめられ、他のすべてのデーモンは/etc/rc.localを編集することで開始されます。
(私は衒学者になろうとはしていません。あなたがどれだけ知っているか、知らないかわからないので、基本的にここでブレインダンプしています)
まず、RedHatがデフォルトでインストールして有効にする奇妙なものを選択することに注意してください。たとえば、avahiをインストールし、起動時に起動できるようにするのはRHEL5またはRHEL6のいずれかです。どちらのバージョンも、選択できるほぼすべてのインストールプロファイルに対してカップをインストールして有効にすると思います。 RHEL6は、デフォルトではman
などをインストールしません。
RHELでは、サービスを管理する方法が3つあります。
/etc/rc.d
または/etc/rcX.d
の下のシンボリックリンクを手動で変更しますchkconfig
を使用します(同じ名前のIRIXのツールをモデルにしています)setup
パッケージが提供するsetuptool
コマンドを使用します(初期インストール時に選択したプロファイルに応じて、インストールされる場合とされない場合があります)。それぞれの詳細:
手動管理:
したがって、RHEL/SystemVの起動シーケンスは次のとおりです。
/etc/rc.sysinit
が実行され、重要なファイルシステムなど、オペレーティングシステムの重要な部分のほとんどが配置されます。
次に、init
は/etc/rcX.d
(起動するランレベルのX)を調べ、そこに含まれるすべてのファイル/シンボリックリンクを(アルファベット順に)実行します。
名前がS
で始まる場合、スクリプトstart
をargv[1]
/$1
として指定します。
それらの名前がK
で始まる場合、サービスを停止(またはkills
)します。
慣例では、依存関係はK
またはS
の後の番号を変更することで処理され、アルファベット順の位置を変更するだけの効果があります。
/etc/rc.local
にあるものは何でも実行します
実際のサービススクリプトは/etc/rc.d/init.d
にあります(これは/etc/init.d
にもシンボリックリンクされています)。サービスを実行レベル3(ネットワークでGUIなし)で開始する場合は、次のようにします。
# cd /etc/rc3.d
# ln -s /etc/init.d/myService S99myService
chkconfigを使用
chkconfig
の目的は、基本的に上記のプロセスを自動化することです。 chkconfig
でサービスを管理する前に、initscriptに特定のヘッダーが必要であるという欠点があります。たとえば、これはネットワーキングサービスの開始です。
#! /bin/bash
#
# network Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
# start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
### END INIT INFO
これにより、chkconfig
が有効になり、依存関係を適切に機能させるために設定/変更する必要のある数を把握できます。順序を変更する機能は失われますが、上記の理由により、実際にはほとんど問題になりません。
chkconfig
は簡単で、率直に言って私がほとんどの場合使用するものです。
chkconfig --list
を使用して、どのサービスがどの実行レベルで構成されているかを確認できます。次に例を示します。
[root@ditirlns01 ~]# chkconfig --list | head
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
arptables_jf 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:off 4:on 5:on 6:off
auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
autofs 0:off 1:off 2:off 3:off 4:on 5:on 6:off
avahi-daemon 0:off 1:off 2:off 3:off 4:on 5:on 6:off
avahi-dnsconfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
capi 0:off 1:off 2:off 3:off 4:off 5:off 6:off
または、特定のサービスのステータスを確認します。
[root@ditirlns01 ~]# chkconfig --list auditd
auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
chkconfig <serviceName> on
を介してサービスを有効にできます。上記の例を続けます。
[root@ditirlns01 ~]# chkconfig auditd on
[root@ditirlns01 ~]# chkconfig --list auditd
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ご覧のとおり、chkconfig
は、実行レベル3から5に対してauditd
サービスを有効にします。
それを望まない場合は、--levels
オプションを使用して、以下を有効にする特定の実行レベルを設定できます。
[root@ditirlns01 ~]# chkconfig auditd off
[root@ditirlns01 ~]# chkconfig auditd on --levels=3
[root@ditirlns01 ~]# chkconfig --list auditd
auditd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
setuptoolを使用
setup
は、システム管理の最新のイテレーションであり、一般的な管理タスクを少し簡単にするように設計されています。 Red Hatがそれを行うために必要なすべてをインストールする場合、それはそのように機能します。しかし、RHEL6以降、いくつかのパッケージ間でsetuptool
機能が分離されました(メニューを詰まらせることなく、より包括的にすることができると思います)。
これは、特定の実行レベルを特定できないことを除けば、chkconfig
のかなり自明なncursesベースのラッパーです。
それを超えてそれについて言うことはあまりありません。
それがあなたの質問に答えたかどうか私に知らせてください。