[ubuntu-jp] 起動・停止スクリプト (/lib/lsb/init-functions)

RxOrca divetree at gmail.com
Thu Apr 19 10:08:22 BST 2007


こんにちは。
Rexx使いの Orcaです。

バグのよーなのを見付けたけどどこにアレするのか分からないので質問です。

現在, 印刷処理のためのデーモンを動かそーとしてます。
キヤノンのブツです。 http://cweb.canon.jp/drv-upd/lasershot/linux/captlinux.html
起動・停止スクリプトも付いてたけど, それは元々 RedHat系のものらしく,
そのままではうまく動きません。

んで, 処理をなるべく合わせて加工しよーとして /lib/lsb/init-functions を
見付け, そこに関数が定義されてたけど, でも問題がありそーな感じです。

1) 起動関数の処理の流れが pidfile必須のようなそうでないような。
   そのため (pidfileが存在しないと) 何度も起動できてしまう。

2) 停止関数は pidfile必須になってしまってる。
   なので pidfileが無いと停止させることができない。


起動部分 start_daemon はこんな感じ (抜粋)
---------- ここから ----------
    pidfile=/dev/null

    for i in $*; do
        case $i in
            -f)  force=1; shift;;
            -n)  nice=$2; shift 2;;
            -p)  pidfile=$2; shift 2;;
            --)  shift; break;;
        esac
    done

    exec=$1; shift

    if [ $force = 1 ]; then
        /sbin/start-stop-daemon --start --nicelevel $nice --quiet
--startas $exec --pidfile /dev/null --oknodo -- $*
    elif [ $pidfile ]; then
        /sbin/start-stop-daemon --start --nicelevel $nice --quiet
--exec $exec --oknodo --pidfile "$pidfile" -- $*
---------- ここまで ----------

start_daemonをデーモンだけ指定して呼び出しても, [ $pidfile ]; の部分が
有効になってしまうです。

変数の初期化部分を修正して pidfile= だけにすると --pidfileオプション
を指定せずに起動でき, 結果, 重複起動のチェックができるよーになるです。


それから, 停止関数 killprocは pidfileを使うことが前提のよーです。
pidofproc関数を使って /var/run/$base.pidって形で作成して, なんとか
できるカモだけど, そーゆー仕様ってことでしょーか。

# このキヤノンのデーモン ccpdは, なぜか一度に 2つのプロセスができて
# しまって, killproc使うと 1つしか停められないよーです。
# Debian 4.0(?) で動かすとなぜか 1プロセスになってて, その違いも
# 問題と言えば問題なよーな気がするけど ・・・



More information about the ubuntu-jp mailing list