
Я пытаюсь понять, почему мой процесс не работает, если запущен через скрипт, но работает нормально, если запущен вручную.
Вот подробности:
script — это скрипт запуска Resque Worker. Расположение скрипта — /etc/monit/conf.d/start_resque.sh. Права доступа — 755, владелец — ubuntu:ubuntu
Когда я запускаю скрипт, вывод журнала получает pid и говорит "starting worker ip-xx-xxx-xxx-xx:26732 (или какой у него pid)", однако когда я ps aux | grep 26732, ничего не отображается как запущенное. Когда я запускаю ту же самую команду вручную в каталоге моего проекта rails, отображается тот же вывод "starting worker", и процесс фактически запускается и продолжает работать. Стоит отметить, что при запуске вручную отображается дополнительный вывод: "nohup: ignoring input"
Другой вопрос, с которым кто-то может помочь, заключается в том, почему BACKGROUND=yes на самом деле не демонизирует мой worker... поэтому я прибегаю к nohup, который, кажется, работает нормально.
Вот мой скрипт (команда, которую я запускаю вручную, находится после 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"
Дополнительные примечания: на Ubuntu 12.04 я подключен через и ssh
одновременно выполняю скрипт и ручную команду.
решение1
Хорошо, я перешел на Sidekiq, и он "просто работает". Много времени потрачено на возню с resque и развертыванием, но я получил немного опыта и почти повысил свой навык системного администратора. Sidekiq кажется лучшим вариантом - он использует потоки и имеет отличную вики, обновленный веб-интерфейс, профессиональный вариант и действительно классную иконку ниндзя на домашней странице.