Я столкнулся с подобной проблемой, но мои журналы четко идентифицировали проблему: отправка USR2 первоначально будет работать на развертываниях, но, как только развертывания будут очищены, выпуск, на котором изначально был запущен мастер Unicorn, будет удален, поэтому попытки отправкисигнал USR2, по-видимому, ничего не делает / терпит неудачу, с журналом ошибок, в котором указано:
раздвоенный дочерний процесс, выполняющийся повторно ... 53 / var / www / application / Releases / 153565b36021c0b8c9cbab1cc373a9c5199073db / vendor / bundle /ruby / 1.9.1 / gems / unicorn-4.3.1 / lib / unicorn / http_server.rb: 439: в `exec ': нет такого файла или каталога - / var / www / application / Releases / 153565b36021c0b8c9cbab1cc373a9c5199073db / vendor / bundle /ruby / 1.9.1 / bin / unicorn (Errno :: ENOENT)
В документах Unicorn упоминается эта потенциальная проблема при http://unicorn.bogomips.org/Sandbox.html: «очистка старых ревизий приведет к установке конкретных ревизийединорог пропадет, а обновления потерпят неудачу ", что в моем случае означало, что USR2" ничего не делает ".
Я использую приложение от Chefкатионный рецепт для развертывания приложений, который создает символическую директорию vendor_bundle, которая используется совместно для всех развертываний, но при вызове bundle exec unicorn
исходный мастер Unicorn все еще содержал ссылку на путь, которая включала конкретный каталог выпуска.
Чтобы исправить этоМне пришлось позвонить bundle exec /var/www/application/shared/vendor_bundle/ruby/1.9.1/bin/unicorn
, чтобы убедиться, что мастер Unicorn имеет путь к двоичному файлу, который будет действителен от одного развертывания к другому.Как только это будет сделано, я смогу развернуть для себя все необходимое, и kill -USR2 PID
будет работать так, как объявлено.
В документации Unicorn упоминается, что вы можете вручную изменить ссылку на двоичный путь, установив следующее в файле конфигурации Unicorn и отправивHUP для перезагрузки Unicorn перед отправкой USR2 для разветвления нового мастера: Unicorn::HttpServer::START_CTX[0] = "/some/path/to/bin/unicorn"
Возможно, это полезно для некоторых людей в подобных ситуациях, но я не реализовал это, так как он указывает абсолютный путь кобщего двоичного файла единорога было достаточно.