• お問い合わせ
  • ユーザー登録
ドキュメント
サポート案内
ユーザー登録
サポートセンター
ドキュメント
ダウンロード
セキュリティ
よくある質問とその回答
製品マニュアル
カタログ
収録パッケージ一覧


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