0

ネットワーク接続を監視する Ruby プログラムを起動するための、非常に単純なラッパー スクリプトを用意しました。スクリプトはルーター上にあるため、bash ではなく ash を使用しています。

monit を使用してステータスを監視しているため、PID ファイルが必要です。問題は、ラッパーによって設定されたプロセス ID が ruby​​ プログラムよりも 1 つ小さいことです。

したがって、Monit は数百のプロセスにまたがっています。ラッパーに ruby​​ プログラムを起動させ、正しい pidfile を作成させるにはどうすればよいですか?

私のラッパーは次のようになります。

#!/bin/sh /etc/rc.common
  start(){
    echo $$ > /var/run/ping.pid
    ruby /etc/scripts/ping.rb & > /dev/null 2>&1
  }
  stop(){
    kill `cat /var/run/ping.pid`
}
4

1 に答える 1

2

私はあなたがしなければならないと思う:

#!/bin/sh /etc/rc.common
  start(){
    ruby /etc/scripts/ping.rb & > /dev/null 2>&1
    echo $! > /var/run/ping.pid
  }
  stop(){
    kill `cat /var/run/ping.pid`
}

POSIX シェル ( などsh) では、$$にはシェルの現在のプロセス ID が$!含まれ、最近生成された非同期サブプロセスのプロセス ID が含まれます。この場合、$!ruby の PID が含まれます。

于 2012-10-03T11:18:18.797 に答える