2011年1月3日(月) 10:35
玄箱が起動した後でカードリーダを刺すと自動で動きますが、刺した状態で玄箱を起動すると BonCasServer が動きませんでした。どうやら起動順序が udev -> pcscd の順のようで、動かないようです。
そこで BonCasServer の起動を遅らせてみました。
udev のルールで直接起動するのではなく、起動用のシェルスクリプトを作成しました。udev のルールではこのシェルスクリプトを呼び出します。
bcs-start.sh
---------------------ここから---------------------
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
N=`ps ax|grep bcs-perl|grep \.pl`
pid=`expr "$N" : '\\([0-9]*\\)'`
if [ "$pid"x != x ]; then
kill -KILL $pid
fi
/usr/local/bin/bcs-start2.sh &
---------------------ここまで---------------------
一応、bcs-perl.pl のプロセスが残っていたら強制終了させます。(udev の remove で終了させようとしたのですがうまくいきませんでした。)
また、udev のルールで実行するコマンドはできるだけ短い時間で終了させる必要があるので、実際に bcs-perl.pl を起動するシェルスクリプトをバックグラウンドで呼び出します。
bcs-start2.sh
---------------------ここから---------------------
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
sleep 60
perl /usr/local/bin/bcs-perl.pl > /dev/null 2>&1 &
---------------------ここまで---------------------
待ち時間がどのくらい必要かわからなかったので 60 秒 sleep させました。
これで玄箱起動時にカードリーダが刺さっていても BoCasServer が動くようになりました。
written by sirius
[玄箱]
[この記事のURL]
[コメントを書く]
[コメント(0)]
[TB(0)]
-
この記事へのトラックバックPingURL
-