it-roy-ru.com

Rails: как перезапустить sidekiq?

Я использую Sidekiq Gem для запуска вызовов API в фоновом режиме. Я запускал sidekiq в процессе демона, как:

  bundle exec sidekiq -d

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

  kill -9 process_id 

но это не работает Я хочу знать команду для перезапуска процесса sidekiq. Если у вас есть идеи, пожалуйста, поделитесь со мной.

Я также попробовал следующую команду:

 sidekiqctl stop /path/to/pid file/pids/sidekiq.pid
21
Can Can

Поэтому после того, как вы найдете свой process_id, используйте приведенную ниже команду, которая не даст работникам получить новые задания и завершит существующие.

kill -USR1 [PROCESS_ID]

После этого вы можете убить их

kill -TERM [PROCESS_ID]

Также есть страница на sidekiq/wiki об этом, называемая Signals.

[Правка]

Здесь это сигнальная страница.

[Правка]

Проверить видео

21
alexsmn

Начните:

$ bundle exec sidekiq -d -P tmp/sidekiq.pid -L log/sidekiq.log 

где -d demonize, -P pid-файл, -L лог-файл.

Стоп:

$ bundle exec sidekiqctl stop tmp/sidekiq.pid 0
Sidekiq shut down gracefully.

где 0 - количество секунд ожидания до выхода из Sidekiq.

41
hlcs

Чтобы сохранить работоспособность демона, у вас обязательно должна быть хорошая обработка ошибок в классах HardWorker, но вы также можете использовать приведенную ниже команду для перезапуска исполнителей sidekiq, если они не обнаружены в системных процессах.

x=`ps aux | grep sidekiq | grep -v grep | awk '{print $2}'`; [ "$x" == "" ] && cd /path/to/deploy && bundle exec sidekiq -d -L /path/to/deploy/log/sidekiq.log -C /path/to/deploy/config/sidekiq.yml -e production

Это в основном ищет PID с использованием ps aux | grep sidekiq | grep -v grep | awk '{print $2}' и затем сохраняет его в переменной x. Затем, если он пуст, он запустит демонизированный процесс sidekiq.

Вы можете засунуть этого парня в работу cron или что-то в этом роде. Но если ваша работа постоянно терпит неудачу, вы определенно захотите выяснить, почему.

Правка: Добавлен путь для развертывания из cron.

4
Jonathan Reyes
  1. Введите следующую команду: ps -ef | grep sidekiq Это дает process_id и другие подробности запуска процесса sidekiq в фоновом режиме.
  2. Скопируйте process_id и используйте следующую команду: kill process_id
  3. Используйте следующую команду, чтобы снова запустить sidekiq в фоновом режиме с опцией -d: bundle exec sidekiq -d -L log/sidekiq.log
0
user3133204