|
Tips No. 400
サービスの追加方法

【質問】
独自のサービスを行うデーモンを作成しました。
このサービスをシステムに追加する方法を教えてください。
【回答】
あなたが作成したデーモンによるサービスをシステムに追加する方法は、多数あります。
その場限りであれば、最も素朴な方法ですが、そのデーモンをコマンドラインから直接
入力すればサービスが開始します。
ここでは、Turbolinux に標準で含まれるサービス(例えば、sshd、lpd 等)と同様に管理
する方法の1つを紹介致します。
(スーパーデーモン inetd を使う方法は、ここでは触れていません。)
説明の都合上、追加するサービスは、
-------------------------------------------------------------------------------
サービス名 foobar
デーモンの実行ファイル /usr/local/sbin/foobar
サービス起動/停止スクリプト /etc/rc.d/init.d/foobar
-------------------------------------------------------------------------------
というようなものとします。また、デーモン /usr/local/sbin/foobar は起動時に自分
自身のプロセス ID をファイル /var/run/foobar.pid にアスキーテキスト形式で出力す
るものとします。更に socket API 等を用いてこのデーモンも用意されているものとし
ます。
【手順】
(1)
あなたのサービスが実行されるランレベルを予め決めてください。
通常 2, 3, 4, 5 や 3, 4, 5 などが多いです。本例では 3, 4, 5 とします。
(2)
サービス起動/停止スクリプト /etc/rc.d/init.d/foobar を作成します。以下に載せた
スクリプトの例は、必要最小限のものです。各行の先頭の数字: は行番号ですので、ス
クリプトの記述にはふくまれないので注意してください。同じディレクトリにある他の
サービス用のスクリプトも参考にするとよいでしょう。
サービス起動/停止スクリプトの例
[/etc/rc.d/init.d/foobar]
-------------------------------------------------------------------------------
1: #!/bin/bash
2:
3: # Foo Bar
4: #
5: # chkconfig: 345 50 20
6: # description: Foo Bar
7: #
8: # processname: foobar
9: # pidfile: /var/run/foobar.pid
10:
11: # source function library
12: . /etc/rc.d/init.d/functions
13:
14: RETVAL=0
15:
16: PID_FILE=/var/run/foobar.pid
17:
18: case "$1" in
19: start)
20: echo -n "Starting foobar: "
21: if [ ! -f $PID_FILE ] ; then
22: /usr/local/sbin/foobar
23: RETVAL=$?
24: if [ "$RETVAL" = "0" ] ; then
25: #success "foobar startup"
26: echo "foobar startup"
27: touch /var/lock/subsys/foobar
28: else
29: #failure "foobar startup"
30: echo "foobar startup"
31: fi
32: fi
33: echo
34: ;;
35: stop)
36: echo -n "Shutting down foobar: "
37: if [ -f $PID_FILE ] ; then
38: killproc foobar
39: [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/foobar
40: fi
41: echo
42: ;;
43: restart)
44: $0 stop
45: $0 start
46: RETVAL=$?
47: ;;
48: status)
49: status foobar
50: RETVAL=$?
51: ;;
52: *)
53: echo "Usage: foobar {start|stop|restart|status}"
54: exit 1
55: ;;
56: esac
57:
58: exit $RETVAL
-------------------------------------------------------------------------------
5 行目と 6 行目のコメントは、サービスを管理するためのツールに、あなたのサービ
スの走行使用を知らせるためのものです。特に、タグ chkconfig: 以下の数字は、順に
サービスを追加したときの初期登録走行ランレベルの組、起動時の優先順位、停止時の
優先順位となります。
12 行目は標準でシステムに用意されているデーモンプロセス制御のシェル関数ユーティ
リティ /etc/rc.d/init.d/functions を使用できるようにするためのものです。
20 行目から 33 行目までが起動処理、36 行目から 41 行目までが停止処理です。ここ
で、起動処理ブロックの 27 行目と停止処理ブロックの 39 行目は重要です。システム
はランレベルが変化したとき、サービスの状態を変えようとしますが、起動すべきサー
ビスが既に走行していたら、そのサービスにアクションを起こしません。このアクショ
ンをするか/しないかの制御に、この部分が係わっています。
サービスを停止するとき、38 行目が機能してデーモンが落されます。
(3)
最後に以下のようにして、サービスをシステムに登録してください。
サービスの登録
# chmod +x /etc/rc.d/init.d/foobar
# chkconfig --add foobar
以後、再起動すれば、あなたのサービスはシステムで働くようになります。
また、Turbo Tools の turboservice (または serviceboard ) で、あなたのサービスの
起動/停止管理ができるようになります。

関連文書 (none)
Last modified : Fri May 25 JST 2001 # 1
|