[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:41675] Re: 起動停止スクリプトについて



 こんにちは。島田です。

On Thu, 14 Oct 2004 16:12:46 +0900
<hab47260@xxxxxxxxxxxxx> wrote:

> >man start-stop-daemonより。
> 
> >              このオプションは動作しない場合がある。特に、プログラムの実行時に
> >              そのメインプロセスから fork するようなプログラムでは正しく動作し
> >              ない。このため、通常は --background オプションと併用する場合にの
> >              み有用である。
> 武藤さん
> どうも
> 
> それで
>  --make-pidfile --background
> を入れて実行しました
> たしかにpidfileが作成されたのですが
> なぜか、実際のJOBはpidfileファイルの
> 数より+1大きいのです

 武藤さんの man の引用にあるとおり、メイン・プロセスから fork している
プログラムではうまく行きません。
 pid ファイルには、start-stop-daemon が起動したプロセスの PID が書き込
まれます。たとえば、

    start-stop-daemon --quiet --start --make-pidfile \
      --pidfile /var/run/sleep.pid \
      --exec /bin/sleep 10000 --background

なら、pid ファイルには /bin/sleep 10000 そのものの PID が書き込まれます
が、

    ===== /usr/local/bin/sleep.sh =====
    #!/bin/sh
    /bin/sleep 10000 &   # ここで fork & exec している

に対して、

    start-stop-daemon --quiet --start --make-pidfile \
      --pidfile /var/run/sleep.pid \
      --exec /usr/local/bin/sleep.sh --background

を行うと、まず start-stop-daemon により /usr/local/bin/sleep.sh が起動さ
れ、その PID が pid ファイルに書き込まれますが、/usr/local/bin/sleep.sh 
はこの後 /bin/sleep 10000 を起動するので、/bin/sleep 10000 の PID と pid 
ファイルの PID とは一致しません。
 この場合、/usr/local/bin/sleep.sh とそれが fork したプロセス 
(/bin/sleep 10000)とで名前が違うのでわかりやすいのですが、デーモンでは
同じ名前で fork するプログラムも多いので、見かけ上、pid ファイルよりも PID 
が +1(あるいはもっと)されているように見えることがあります。


---
二胡を始めよう! お勧めの二胡をご用意しました
いますぐクリック ==> http://www.1bangenki.biz/
----------------------------------------------------------------------
Mail: shimaden@xxxxxxxxx
Home Page: http://www.din.or.jp/~shimaden/
島田博幸
Hiroyuki Shimada
----------------------------------------------------------------------