11366


Vagrant環境にCentOSをインストールし、monitでsidekiqを監視したものの、プロセスの停止は感知できますが、monitからsidekiqを立ち上げることができません(sidekiq
faled to startとなる)

なお、monitを使わずに手動でrailsのルートディレクトリに移動した後(cd /var/www/my_app)sidekiqの起動コマンド(bundle
exec sidekiq --pidfile /var/www/my_app/tmp/pids/sidekiq.pid --logfile
/var/www/my_app/log/sidekiq.log --daemon)をたたくと起動することができます。

monitのバージョンと設定ファイルは以下のとおりなのですが、原因がわからず、困っています。

■ バージョン情報

[code]

    $ cat /etc/redhat-release
    CentOS release 6.6 (Final)
    
    $ monit -V
    This is Monit version 5.5
    
    $ sidekiq -V
    Sidekiq 3.3.4
    
[/code]

■ /etc/monit.conf

[code]

    set daemon  60 
    set logfile /var/log/monit.log
    set statefile /var/monit/state
    set httpd port 2812 and
        use address localhost  # only accept connection from localhost
        allow localhost        # allow localhost to connect to the server and
    include /etc/monit.d/*
    
[/code]

■ /etc/monit.d/sidekiq

[code]

    check process sidekiq 
      with pidfile /var/www/my_app/tmp/pids/sidekiq.pid
      every 2 cycle
      start program = "/bin/bash -l -c 'cd /var/www/my_app && bundle exec sidekiq --pidfile /var/www/my_app/tmp/pids/sidekiq.pid --logfile /var/www/my_app/log/sidekiq.log --daemon'"
      stop  program = "/bin/bash -l -c 'cd /var/www/my_app && bundle exec sidekiqctl stop /var/www/my_app/tmp/pids/sidekiq.pid 10'"
    
[/code]

■ monit.log  
[GMT+1 Jun 14 02:57:24] error : 'sidekiq' process is not running  
[GMT+1 Jun 14 02:57:24] info : 'sidekiq' trying to restart  
[GMT+1 Jun 14 02:57:24] info : 'sidekiq' start: /bin/bash  
[GMT+1 Jun 14 02:57:54] error : 'sidekiq' failed to start ← これを解消したい

■ sidekiq.log  
何も出力されない

もし、なにかご存知の方いらっしゃいましたら、ご教示頂ければ幸いです。


CC BY-SA 3.0
2015-06-14T04:21:26.313
11323
2015-06-15T06:08:51.107
2015-06-15T03:46:19.900
5902
5902
question
monitoring sidekiq
monitでsidekiqの停止を感知できるが、sidekiqを自動起動できない


ターミナルから手動で実行した時には上手く動いて、monitから実行した時には動かないということは、環境の違いにより、起動コマンドがエラーになるからだと思います。monitのデバッグ方法を２つ紹介します。

  1. monitの環境をシュミレートしてデバッグ
  2. monitの起動コマンドでログを出力

## 1. monitの環境をシュミレートしてデバッグ

[code]

    # monit runs as superuser
    $ sudo su
    
    # the -i option ignores the inherited environment
    # this PATH is what monit supplies by default
    $ env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh
    
    # try running start/stop program here
    $ ここであなたのスクリプトを実行
    
[/code]

## 2. monitの起動コマンドでログを出力

コマンドのラッパースクリプト

[code]

    $ cat monit-wrapper.sh
    
    #!/bin/sh
    {
      echo "MONIT-WRAPPER date"
      date
      echo "MONIT-WRAPPER env"
      env
      echo "MONIT-WRAPPER $@"
      $@
      R=$?
      echo "MONIT-WRAPPER exit code $R"
    } >/tmp/monit.log 2>&1
    
[/code]

monitの設定

[code]

    start program = "/path/to/monit-wrapper.sh YOUR-START-SCRIPT AND ARGS"
    stop program = "/path/to/monit-wrapper.sh YOUR-STOP-SCRIPT AND ARGS"
    
[/code]

参考サイト  
<https://stackoverflow.com/questions/3356476/debugging-monit>  
<http://qiita.com/ogin_s57/items/370743d280ac216bf7c1>


CC BY-SA 3.0
2015-06-15T05:51:51.387
11364
2015-06-15T06:02:56.140
2017-05-23T12:38:56.467
-1
9529
11323
answer


私が以前にmonitを設定した時は、Rails3+rvm環境だったのですが、その時は switch user してから、起動スクリプトを実行しました。

[code]

    check process delayed_job with pidfile /u/apps/thub/shared/pids/delayed_job.pid
      start program = "/bin/su - YOUR_APP_USER -c 'cd /path/to/app/current; RAILS_ENV=production script/delayed_job start'" 
      stop program = "/bin/su - YOUR_APP_USER -c 'cd /path/to/app/current; RAILS_ENV=production script/delayed_job stop'"
    
[/code]


CC BY-SA 3.0
2015-06-15T06:08:51.107
11366
2015-06-15T06:08:51.107
9529
11323
answer