2012-11-17 20 views
6

Sto provando a configurare Monit per Sidekiq. Ecco quello che ho finora per il mio file di configurazione:Monit Ruby on Rails Sidekiq

check process sidekiq_site 
    with pidfile /var/www/site/tmp/pids/sidekiq.pid 
    start program = "bundle exec sidekiq -C /var/www/site/config/sidekiq.yml -P /var/www/site/tmp/pids/sidekiq.pid" with timeout 90 seconds 
    if totalmem is greater than 200 MB for 2 cycles then restart # eating up memory? 
    group site_sidekiq 

Il problema è che sto ricevendo un messaggio quando si esegue Monit reload che il programma "pacco" non esiste.

Qualcuno ha una soluzione per questo?

+2

tenta di scrivere il percorso completo bundler, come '/usr/local/lib/ruby/gems/1.9/ gems/bundler-1.2.3/bin/bundle' o anche prefisso quel percorso con percorso a ruby. Usa il comando 'quale pacchetto 'per trovare il percorso completo. – taro

risposta

1

Qui è una sostanza che ho scritto su github:

check process sidekiq_production with pidfile /var/run/sidekiq_production.pid 
     depends on redis-server 
     start program = "/etc/init.d/sidekiq_production start" with timeout 90 seconds 
     stop program = "/etc/init.d/sidekiq_production stop" with timeout 90 seconds 
     if totalmem is greater than 200 MB for 2 cycles then restart # eating up memory? 
     if 2 restarts within 3 cycles then timeout 

ho scritto anche un init script per sidekiq su Debian: https://gist.github.com/alain75007/5517948

4

Dopo aver lavorato sul mio possiedo monit e sidekiq config, posso condividere ciò che ha funzionato per me con Ubuntu.

In primo luogo, esiste uno script upstart sidekiq per ubuntu se si è su quella distribuzione. Esistono script per sidekiq e per la gestione dei lavoratori: https://github.com/mperham/sidekiq/tree/master/examples/upstart/manage-one

Ho riscontrato alcuni errori con questo script di avvio iniziale, poiché sto utilizzando rvm. Controllare /var/logs/upstart/sidekiq-0.log fa luce sui problemi. Questa linea:

exec bin/sidekiq -i ${index} -e production -C config/sidekiq.yml -P tmp/pids/sidekiq-${index}.pid

bisogno di essere cambiato in exec bundle exec sidekiq + le opzioni

Poi, per tenere tutto in linea con la mia rvm installare, ho cambiato il seguente:

#source $HOME/.rvm/scripts/rvm 
source /usr/local/rvm/scripts/rvm 

In/etc/monit/monitrc faccio riferimento agli script upstart e ho:

# sidekiq 
check process sidekiq 
    with pidfile /var/www/apps/myapp/current/tmp/pids/sidekiq-0.pid 
    start program = "/usr/bin/sudo start sidekiq index=0" 
    stop program = "/usr/bin/sudo stop sidekiq index=0" 
    if totalmem is greater than 500 MB for 2 cycles then restart # eating up memory? 
    if 3 restarts within 5 cycles then timeout 
0

Il tuo problema è che manca il bundle di comandi. Penso che il tuo dovrebbe scrivere il file di configurazione Monit così:

check process sidekiq 
    with pidfile /srv/www/projects/myapp/shared/log/production.sidekiq.pid 
    start program = "/usr/bin/env /usr/bin/env HOME=/home/USER_NAME RACK_ENV=production RAILS_ENV=production PATH=/usr/local/bin:/usr/local/ruby/bin:/usr/bin:/bin:$PATH /bin/sh -l -c 'cd /srv/www/rails/myapp/current; bundle exec sidekiq'" as uid USER_NAME 
    stop program = "/usr/bin/env /usr/bin/env HOME=/home/USER_NAME RACK_ENV=production RAILS_ENV=production PATH=/usr/local/bin:/usr/local/ruby/bin:/usr/bin:/bin:$PATH /bin/sh -l -c 'cd/
    group myapp_workers 

Se si cammina nella directory apps e chiamare raggrupparli in fasci penso che funziona.

0

Ecco la configurazione che funziona su Ubuntu con rvm

check process sidekiq-th with pidfile /web/vcms/tmp/pids/sidekiq.pid 
    start program = "/home/dimon/.rvm/bin/rvm-shell -c '/web/vcms/sidekiq.sh start'" 
    stop program = "/bin/bash /web/vcms/sidekiq.sh stop &" 

Esso utilizza una script, le linee principali sono

inizio

cd /web/vcms; sidekiq -d -e production & 

e stop

sidekiqctl stop $PIDFILE 

Io non sono un guru shell scripting e sarò grato per qualsiasi consiglio =)

1

Infine, questa soluzione ha funzionato per me come fascino :)

check process sidekiq with pidfile path_to_my_pid_file/sidekiq.pid 

start program = "/bin/bash -c 'cd my_app_current && source /home/myuser/.rvm/environments/[email protected] && bundle exec sidekiq -e production -P path_to_my_pid_file/sidekiq.pid -L /my_shared_folder_path/log/sidekiq.log -C my_app_current/config/sidekiq.yml --daemon'" as uid "myuser" and gid "myuser" 

stop program = "/bin/bash -c 'kill -s INT `cat path_to_my_pid_file/sidekiq.pid`'" as uid "myuser" and gid "myuser" 

** Continuate a seguire punti in mente: **

  • Sto usando RVM per la gestione delle versioni di ruby, per favore controlla con rbenv.
  • Qui è necessario passare la posizione globale del rubino il modo in cui ho passato qui: - /home/myuser/.rvm/environments/[email protected]