kazmax - Linux で自宅サーバー

(CentOS6まで)自作のサービスをchkconfigで登録する

Linuxでは、chkconfigコマンドでサービスを登録し、service というコマンドを使ってさまざまなサービスやデーモンを起動、停止させることができますが、自作のサービスも一定の手順を踏めば同じようにサービスとして登録し、serviceコマンドで操作することができます。ここでは、自作のサービスをどうやって登録していくか説明します。
※ CentOS 6までの説明です。CentOS 7からはランレベルの概念やサービスの自動起動の設定方法が変わっています。

Last Update : 2015年07月07日

(CentOS6まで)自作のサービスをchkconfigで登録する 項目

  1. サービスの起動/停止スクリプト(initスクリプト)の作成
  2. サービスの起動/停止スクリプト(initスクリプト)の配置
  3. サービスの登録(chkconfig)
  4. service コマンドでサービスの操作

1. サービスの起動/停止スクリプト(initスクリプト)の作成

サービスの起動/停止スクリプト(initスクリプトといいます)ですが、chkconfigで管理できるようにするには、以下の2項目をコメントの形で追加したスクリプトを作ります。

# chkconfig: 起動させるランレベル 起動時の優先度 停止時の優先度
# description: 説明
起動させるランレベルランレベルを数字で入力。複数ある場合は、連続して2345のように各。- と書くと全てのランレベルでOFFとする。
起動時の優先度数値(1~99までで記入するのが一般的)で記入。数字が大きくなるほど後で起動される。
停止時の優先度数値(1~99までで記入するのが一般的)で記入。数字が大きくなるほど後で停止される。

例)サービスの起動/停止スクリプト(initスクリプト)

例えば、以下のように書きます。

#!/bin/bash
#
# chkconfig: 2345 85 15 ← chkconfig で登録する場合に必須
# description: test. ← chkconfig で登録する場合に必須

case "$1" in
  start)
        echo "Start"
        ;;
  stop)
        echo "Stop"
        ;;
  *)
        echo $"Usage: HOGE {start|stop|restart}"
esac

この場合、以下のような動作を意味します。

  • ランレベル2,3,4,5でサービスが起動。
  • 起動時には優先度80で起動。
  • 停止時には優先度15で停止
  • サービスの説明は、「test」

memo

優先度について

各ランレベルごとに、起動、停止するサービスが登録されていますが(※ サービスの登録状況は、chkconfig --list で確認できる)、同じランレベルに登録されているサービスは、設定された優先度順に起動/停止してしていきます。優先度に指定した数値の小さいものから順番に起動/停止していきます。

どんな順番で設定されているかは、/etc/rc[ランレベル].d/ 配下のスクリプト名で判断がつきます。スクリプト名の先頭の文字は、S優先度(起動させるスクリプト)、もしくは、K優先度(停止させるスクリプト)となっています。

2. サービスの起動/停止スクリプト(initスクリプト)の配置

作成したスクリプトは以下のディレクトリの下へ配置します。

/etc/init.d

実行権限を与えておきます。

# chmod +x test_service

3. サービスの登録(chkconfig)

作成したスクリプトをchkconfig コマンドで登録します。

chkconfig --add スクリプトのファイル名

スクリプトをchkconfigで登録すると、/etc/rc[ランレベル].d/ 配下へ、/etc/init.d/へおいたスクリプトのシンボリックリンクが作成されます。この際、シンボリックリンク名に、S,K,優先度が付与されます。

# ls -1 /etc/rc3.d/
K01smartd         ← 1番目に停止
K02oddjobd        ← 2番目に停止
K05wdaemon        ← 3番目に停止
・・・
S01sysstat        ← 1番目に起動
S02lvm2-monitor   ← 2番目に起動
S03vmware-tools   ← 3番目に起動
・・・

4. service コマンドでサービスの操作

chkconfigでサービスに登録までしてしまえば、他のサービス同様にserviceコマンドで操作することができます。
起動/停止スクリプトの中に、start/stop の引数を与えてそれぞれ動作するようにしておく必要があります。

# chkconfig --add test_service ← test_service を登録
# chkconfig --list test_service
test_service 0:off 1:off 2:on  3:on  4:on  5:on  6:off ← test_service が登録されている

test_service サービスを起動します

# service test_service start ← test_service を起動
Start

memo

スクリプトに、start/stop 以外の引数の処理を記入しておくことで、service コマンドからスクリプトへその引数をわたし様々な処理をすることができます。

#!/bin/bash
#
# chkconfig: 2345 85 15
# description: test.

case "$1" in
  start)
        echo "Start"
        ;;
  stop)
        echo "Stop"
        ;;
  foo)     ← foo という引数の処理を追記
        echo "bar"
        ;;

  *)
        echo $"Usage: HOGE {start|stop|restart}"
esac

foo オプションを使ってみる

# service test_service foo
bar ← foo という引数の処理が実行される。
サービスの管理 関連記事
Linux 基礎知識 関連記事