
Estou tentando descobrir por que meu processo não funciona se iniciado por meio de um script, mas funciona bem se iniciado manualmente.
Aqui estão os detalhes:
script é um script de início de trabalho de resque. A localização do script é /etc/monit/conf.d/start_resque.sh. As permissões são 755 e pertencem ao ubuntu:ubuntu
Quando executo o script, a saída do log obtém um pid e diz "iniciando o trabalhador ip-xx-xxx-xxx-xx:26732 (ou qualquer que seja o pid)", no entanto, quando eu ps aux | grep 26732, nada é mostrado em execução. Quando executo exatamente o mesmo comando manualmente no diretório do projeto Rails, a mesma saída "iniciando o trabalhador" é exibida e o processo é realmente iniciado e continua em execução. Uma coisa a observar: a saída adicional é exibida se iniciada manualmente: "nohup: ignorando entrada"
Outra questão com a qual alguém pode ajudar é por que BACKGROUND=yes na verdade não daemoniza meu trabalhador ... por isso estou recorrendo ao nohup, que parece funcionar bem.
Aqui está o meu script (o comando que executo manualmente fica depois do cd):
#!/bin/bash
echo "starting worker.."
workercount="$(ps aux | grep -c resque)"
currentdir="/var/www/apps/myapp/current"
logdir=$currentdir/log/resque_worker.log
pidfile=$currentdir/tmp/pids/resque_worker_$workercount.pid
cd $currentdir
nohup bundle exec rake environment resque:work RAILS_ENV=production QUEUE='*' VERBOSE=1 PIDFILE=$pidfile >> $logdir 2>&1 &
echo "started worker $workercount! view log at $logdir. view pidfile at $pidfile"
Notas adicionais: no Ubuntu 12.04 e estou conectado ssh
enquanto executa o script e o comando manual.
Responder1
Ok, mudei para o Sidekiq e "simplesmente funciona". Muito tempo perdido brincando com resque e implantação, mas ganhei algum XP e quase subi de nível em minha habilidade de administrador de sistemas. Sidekiq parece uma opção melhor - ele aproveita os tópicos e tem um ótimo wiki, interface web atualizada, uma opção profissional e um ícone ninja muito legal em sua página inicial.