[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