Capistrano, не перезапускающий кластеры Полукровки правильно

fork(2) «разбивает» процесс, называя его на два независимых процесса, второй потомок первого. В родительском процессе (исходный процесс) он возвращает PID дочернего процесса. В дочернем процессе fork() возвращает 0.

Таким образом, в вашем примере цикл прерывается только в дочернем процессе, а в родительском процессе продолжается порождение остальных философов.

Цикл выполняется N - 1 раз, порождая N - 1 детей-философов. После завершения цикла родительский процесс также вызывает philosopher(i), выполняя N -й и последний философ.

5
задан Pete 2 October 2008 в 16:38
поделиться

5 ответов

Можно явно сказать mongrel_cluster рецептам удалять изодромные с предварением файлы перед запуском путем добавления следующего в capistrano рецептах:

# helps keep mongrel pid files clean
set :mongrel_clean, true

Это заставляет это передавать - чистая опция к mongrel_cluster_ctl.

Я возвратился и посмотрел на один из своих рецептов развертывания и заметил, что также изменил способ, которым работала моя задача перезапуска. Смотрите на следующее сообщение в группе пользователей полукровки:

пользовательское обсуждение полукровки перезапуска

Следующее является моей deploy:restart задачей. Я признаю, что это - определенный взлом.

namespace :deploy do
  desc "Restart the Mongrel processes on the app server."
  task :restart, :roles => :app do
    mongrel.cluster.stop
    sleep 2.5
    mongrel.cluster.start
  end
end
4
ответ дан 14 December 2019 в 13:51
поделиться

Так или иначе мои полукровки запускают, прежде чем предыдущая команда остановки закончила закрывать их всех вниз.

сон 2.5 не является хорошим решением, если занимает больше времени, чем 2,5 секунды остановить всех рабочих полукровок.

Кажется, существует потребность в:

stop && start

по сравнению с.

stop; start

(это - то, как удар работает, && ожидает первой команды для окончания w/o ошибки, в то время как""; просто выполняет следующую команду).

Интересно, существует ли a:

wait cluster_stop
then cluster_start
1
ответ дан 14 December 2019 в 13:51
поделиться

Хорошее обсуждение: http://www.ruby-forum.com/topic/139734#745030

0
ответ дан 14 December 2019 в 13:51
поделиться

Во-первых, сузьте объем какой Ваше тестирование, только звоня cap deploy:restart. Вы могли бы хотеть передать --debug опция запросить перед удаленным выполнением или --dry-run опция только для наблюдения, что продолжается, поскольку Вы настраиваете свои настройки.

На первый взгляд это походит на проблему полномочий об изодромных с предварением файлах или процессах полукровки, но трудно знать наверняка. Пара вещей, которые привлекают мое внимание:

  • :runner переменная является набором explicity к nil - Была ли определенная причина этого?
  • Capistrano 2.4 представил новое поведение для :admin_runner переменная. Не видя весь рецепт, это возможно связано с Вашей проблемой?

    :runner по сравнению с: admin_runner (от выпуска capistrano 2.4) Некоторые шапочники отметили что наличие deploy:setup и deploy:cleanup, выполненный как: пользователь бегуна испортил их тщательно созданные полномочия. Я согласился, что это было проблемой. С этим выпуском, deploy:start, deploy:stop, и deploy:restart все продолжают использовать: пользователь бегуна, когда sudoing, но deploy:setup и deploy:cleanup будут использовать: пользователь admin_runner.: переменная admin_runner сброшена, по умолчанию, означая, что те задачи будут sudo как корень, но если Вы хотите, чтобы они работали как: бегун, просто “установите: admin_runner, бегун”.

Моя рекомендация для того, что сделать затем. Вручную остановите полукровок и очистите PIDs. Запустите полукровок вручную. Затем, продолжите работать cap deploy:restart при отладке проблемы. Повторитесь по мере необходимости.

1
ответ дан 14 December 2019 в 13:51
поделиться

Я очень не хочу быть настолько основным, но это кажется, что изодромные с предварением файлы все еще бродят вокруг, когда это пытается запуститься. Удостоверьтесь, что полукровка останавливается вручную. Очистите изодромные с предварением файлы вручную. Затем сделайте ограничение развертывается.

0
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: