Отложенные задания останавливаются через некоторое время

У меня есть приложение, которое сильно зависит от отложенных заданий. Итак, я настроил два сервера, один из которых обслуживает приложение (экземпляр m3.medium ec2), а другой выполняет мои отложенные задания (экземпляр t2.micro ec2). Я создал сценарий запуска и остановки для отложенных заданий. Здесь я сталкиваюсь с проблемами. Отложенные задания выполняются без сбоев, но проблема в том, что они автоматически останавливаются через некоторое время. Поэтому каждый раз, когда они останавливаются, мне приходится вручную запускать их снова. Я понятия не имею, почему они останавливаются посреди обработки задания.

Итак, в основном у меня есть два вопроса:

  1. Что я могу сделать, чтобы задания не останавливались, а если и останавливались, то запускались автоматически сразу/или через какое-то время?

  2. Как я могу заставить их запускаться автоматически при перезагрузке/запуске экземпляра?

Я просмотрел много подобных вопросов, но никто не помогает.

Любые советы приветствуются.

Редактировать 1:

Мой сценарий запуска/остановки для отложенных заданий.

set -e

# drop privs if necessary
if [ "$(id -u)" == "0" ]; then
  exec su $(stat -c %U $(dirname $(readlink -f $0))/../config/environment.rb) -c "/bin/bash $0 $@"
  exit -1;
fi

# switch to app root
cd $(dirname $(readlink -f $0))/..

# set up config
if [ -e "config/GEM_HOME" ]; then
  export GEM_HOME=$(cat config/GEM_HOME)
fi
#export GEM_HOME=/path/to/gem/home
export RAILS_ENV=production

# run delayed jobs
exec script/delayed_job $@

# following an article I have tried adding the following code restart on crash.

# restarting the service 
respawn

#Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90

person Ravi    schedule 17.01.2017    source источник
comment
t2.micro очень плохо справляется с кражей процессоров. это означает, что вы можете не получить достаточно циклов процессора. Посмотрите, нет ли тайм-аута в вашей отложенной работе. Я использовал sidekiq на средних коробках, и журналы обычно чистые. Используйте демон для автоматического перезапуска и показа любых журналов для добавления к вопросу, который может помочь правильно определить проблему.   -  person Sairam    schedule 17.01.2017
comment
Я также чувствовал, что это может быть проблемой. Не могли бы вы объяснить, как я могу использовать инструменты демона. Я пытаюсь разобраться в нескольких статьях и не могу этого сделать. Я отредактирую свой вопрос с помощью сценария, который я использую для запуска и остановки отложенных заданий.   -  person Ravi    schedule 17.01.2017
comment
Я бы посоветовал вам переключиться на лучший ящик или использовать существующий ящик, чтобы увидеть, сохраняется ли эта проблема с тем же скриптом. Я не знаю respawn. Это может помочь - superuser.com/questions/507576/ Посмотрите журналы на этом сервере   -  person Sairam    schedule 18.01.2017


Ответы (1)


Кажется, у вас может быть проблема с памятью, которая его убивает. вы можете попробовать Monit автоматически запускать задание, если оно убито

ссылка: http://railscasts.com/episodes/375-monit

Альтернатива: вы также можете использовать sidekiq вместо отложенного задания.

person Hardik Gondaliya    schedule 17.01.2017