システムの起動・サービス

  1. Linuxの起動

    1. 起動の手順
       Linuxは最初、CPUのマザーボードに実装されたFlashROMから実行を開始します。このプログラムをBIOSといいます。BIOSは、ディスクの先頭にあるMBRのプログラムを実行します。このプログラムを Boot プログラムとよび、LinuxではGROBやLILOと呼ばれるプログラムが、Linuxのコアであるカーネルを読み込みます。
       カーネルは、init プロセスを実行し、必要な初期化やサーバー起動を実行します。

  2. ブートローダ

    1. ブートローダ
      PCを起動すると最初にマザーボードのBIOSが起動し、ハードディスクのMBR (Master Boot Record)という領域に記録されている情報に基づき、ハードディスクからOSを読み込みます。

    2. LILO
      Linux で標準的に利用されているブート・ローダは少し前は LILO (LInux LOader) でした。 最近のディストリビューションには GRUB(GRand Unified Bootloader)というブート・ローダが標準になっているものもあります。LILOは lilo.conf ファイルの内容を参照して、Linuxシステムを立ち上げます。

      例 "/etc/lilo.conf
      boot=/dev/hda
      map=/boot/map
      install=/boot/boot.b
      prompt
      timeout=50
      message=/boot/message.ja
      linear
      default=linux
      
      image=/boot/vmlinuz-2.4.4-18k
              label=linux
              read-only
              root=/dev/hda1
      
      other=/dev/hda1
             optional
             label=dos                

  3. サービスの起動:initと終了

    1. initプロセス
      Linuxは起動すると init コマンドを実行します。initコマンドは /etc/inittab を参照して、起動処理を実行します。起動すると、ランレベル0から順に実行されます。各ランレベルで設定されたサーバーを起動します。
       各ランレベルは次のような機能を組み込みます。

      # 0 - halt (Do NOT set initdefault to this)
      # 1 - Single user mode
      # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
      # 3 - Full multiuser mode
      # 4 - unused
      # 5 - X11
      # 6 - reboot (Do NOT set initdefault to this)

      Xウインドウシステム(GUI)を利用する場合ランレベル5を、そうでない場合ランレベル3まで立ち上げます。立ち上げるランレベルは /etc/inittab ファイルの、id:5:initdefault: の行で設定します。id:5 の5を3に設定すると、ランレベルル3で立ち上げを終了します。

      /etc/inittab

       id:5:initdefault:
       
    2. 終了
      ターミナル上からのシステムの停止は次のコマンドで行います。

       shutdown -h now

      -h は halt のオプションで, now は直ちに動作を行うことを示しています。 now は時間を指定することで停止する時間を設定できます。

       halt

      でも終了を行います。

  4. ランレベルとサービスの起動

    1. ランレベルの設定
       カーネルは、ランレベルを指定して、init処理を開始します。init処理は、ete/inittab を参照して起動を行います。このファイルの先頭の行にデフォルトの ランレベル が設定されています。この値が5のとき、Xウインドウまで起動が進みます。3の場合は、ウインドウシステムは起動せず、コマンドレベルでの実行になります。
       各ランレベルでは、/etc/rc.d ディレクトリにある rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d ディレクトリにあるスクリプトファイルに基づきサービスを起動します。

      inittab

      id:3:initdefault:

      # System initialization.
      si::sysinit:/etc/rc.d/rc.sysinit

      l0:0:wait:/etc/rc.d/rc 0
      l1:1:wait:/etc/rc.d/rc 1
      l2:2:wait:/etc/rc.d/rc 2
      l3:3:wait:/etc/rc.d/rc 3
      l4:4:wait:/etc/rc.d/rc 4
      l5:5:wait:/etc/rc.d/rc 5
      l6:6:wait:/etc/rc.d/rc 6

    2. スクリプトファイル
       /etc/rc<n>.d ディレクトリには、起動用のスクリプトファイルのlリンクがあります。Sxxで始まるスクリプトファイルは対応するサービスを起動します。Kxxで始まるスクリプトファイルは実行されません。下は3レベルの起動用ファイルです。
       S10でnetworkサービス、S55でsshd が起動されています。

      >ls rc3.d
      ls rc3.d
      K05saslauthd  K50snmpd      S08iptables  S24pcmcia      S85gpm      S97rhnsd
      K15httpd      K50snmptrapd  S09isdn      S25netfs       S90FreeWnn  S99httpd
      K20nfs        K50tux        S10network   S26apmd        S90canna    S99local
      K24irda       K50vsftpd     S12syslog    S28autofs      S90crond    S99mysqld
      K25squid      K70aep1000    S13portmap   S55sshd        S90cups     S99named
      K35smb        K70bcm5820    S14nfslock   S56rawdevices  S90xfs      S99postfix
      K35winbind    K95firstboot  S17keytable  S56xinetd      S95anacron  S99smb
      K45named      S05kudzu      S20random    S58ntpd        S95atd      S99webmin
    3. 起動用スクリプト
       各サービスの起動処理は、/etc/init.d にあるスクリプトで実行できます。rc<n>.d のスクリプトはこのスクリプトを利用しています。

    4. サービスの確認
       各レベルのサービスの起動状態は /sbin/chkconfig --l コマンドで確認できます。このコマンドで rc<n>.d のスクリプトの追加削除も可能です。

      [root@hibashi etc]# /sbin/chkconfig --list
      kudzu 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ
      syslog 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
      netfs 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ
      network 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
      random 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ

      -add,--del でサービスの追加、削除を指定できます。

      /sbin/chkconfig --del ntpd

    5. 自動起動
       サービスを起動時に指定するには、rc<n>.d のファイルで行いますが、この設定は
       /usr/sbin/ntsysv
      で設定することができます。
       これは、文字カーソルを利用した、CUI(文字画面による擬似的なGUI) インターフェースになっています。矢印キーでデーモンを選択し、空白キーで設定・解除を行います。タブキーでok/取り消しを選択し、enterで終了します。
       現在実行中のサービスの起動/停止は次のサービスで設定します。


    6. サービスの開始、停止
       
      一時的にサービスを開始、停止するには、service コマンドが利用できます。
        service <サービス名> [start|stop|restart|status]
      statusでは実行状態を確認できます。

      [root@hibashi etc]# /sbin/service mysqld status
      mysqld (pid 3868) を実行中...

  5. cron

    1. cronとは
      cronは指定時間間隔で、指定したコマンドを実行する機能です。/etc/にcron.daily、cron.weekly、などのディレクトリがあります。crond デーモンが起動していれば、このディレクトリに実行したいコマンドを書き込んだバッチファイルを配置すれば、定期的に実行をしてくれます。バッチファイルには、実行属性を設定する必要があります。