3

サーバーを起動および停止するために正常に動作するスクリプトを作成しました。

#!/bin/bash

PID_FILE='/var/run/rserve.pid'

start() {
       touch $PID_FILE
       eval "/usr/bin/R CMD Rserve"
       PID=$(ps aux | grep Rserve | grep -v grep | awk '{print $2}')
       echo "Starting Rserve with PID $PID"
       echo $PID > $PID_FILE
}
stop () {
       pkill Rserve
       rm $PID_FILE
       echo "Stopping Rserve"
}

case $1 in
    start)
       start
       ;;
    stop)  
       stop
       ;;
     *)  
       echo "usage: rserve {start|stop}" ;;
 esac
 exit 0

実行して起動すると

rserve start

そして起動monitすると、PID とサーバーが正しくキャプチャされます。

The Monit daemon 5.3.2 uptime: 0m 

Remote Host 'localhost'
  status                            Online with all services
  monitoring status                 Monitored
  port response time                0.000s to localhost:6311 [DEFAULT via TCP]
  data collected                    Mon, 13 May 2013 20:03:50

System 'system_gauss'
  status                            Running
  monitoring status                 Monitored
  load average                      [0.37] [0.29] [0.25]
  cpu                               0.0%us 0.2%sy 0.0%wa
  memory usage                      524044 kB [25.6%]
  swap usage                        4848 kB [0.1%]
  data collected                    Mon, 13 May 2013 20:03:50

停止すると、プロセスが適切に強制終了され、監視が解除されます。ただし、もう一度起動しても、サーバーは再起動しません。

ps ax | grep Rserve | grep -vc grep
1
monit stop localhost
ps ax | grep Rserve | grep -vc grep
0
monit start localhost

[UTC May 13 20:07:24] info     : 'localhost' start on user request
[UTC May 13 20:07:24] info     : monit daemon at 4370 awakened
[UTC May 13 20:07:24] info     : Awakened by User defined signal 1
[UTC May 13 20:07:24] info     : 'localhost' start: /usr/bin/rserve
[UTC May 13 20:07:24] info     : 'localhost' start action done
[UTC May 13 20:07:34] error    : 'localhost' failed, cannot open a connection to INET[localhost:6311] via TCP

モニターは次のとおりです。

check host localhost with address 127.0.0.1
  start = "/usr/bin/rserve start"
  stop = "/usr/bin/rserve stop"
  if failed host localhost port 6311 type tcp with timeout 15 seconds for 5 cycles
    then restart
4

5 に答える 5

8

シェル経由でもプロセスの開始または停止に問題がありました。1 つの解決策は、次のように構成に「/bin/bash」を追加することです。

start program = "/bin/bash /urs/bin/rserv start"
stop program = "/bin/bash /urs/bin/rserv stop"

それは私のために働いた。

于 2013-10-25T08:24:52.310 に答える
0

私にとっての問題は、構成で「その後再起動」を明確に指定したにもかかわらず、停止コマンドが実行されていないことでした。解決策は変更するだけでした: start program = "/etc/init.d/.... restart"

于 2019-06-28T07:57:44.590 に答える