Linux の作法では、
. /etc/rc.d/init.d/functions
で function library をソースしてこの中に定義されている起動用の daemon、終了用の killproc、あるいは特別な終了コマンドを呼ぶ場合や、準備コマンドを呼ぶ必要がある場合、action などのシェル関数を使う。
case "$1" in
start)
# Start daemons.
daemon
foobar
echo
touch /var/lock/subsys/foobar
;;
stop)
# Stop daemons.
action
"Shutting down foobar: " foobarkill
rm -f /var/lock/subsys/foobar
;;
のような感じ。ちなみに、jserver の場合は、daemon jserver とやると問題がある。これは、jserver が子プロセスを fork したあとで、自分自身を kill するため、return code は SIGTERM = 15 となることによる。そこで、daemon 関数を使うと、return code が 0 でないので [ OK ] でなく [FAILED] と表示してしまうわけである。そこで、daemon jserver のかわりに
jserver
[ $? = 15 ] && echo_success
|| echo_failure
などとしておけばよい。ちなみにシグナルの番号については
/usr/include/bits/signum.h
を見る。