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

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

  bundle exec sidekiq -d

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

  kill -9 process_id 

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

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

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

Ответы

Ответ 1

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

kill -USR1 [PROCESS_ID]

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

kill -TERM [PROCESS_ID]

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

[править]

Здесь - страница сигнала.

[править]

Отметьте видео

Ответ 2

Начало:

$ 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.

Ответ 3

Чтобы поддерживать работу демона, в классах 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 или что-то в этом роде. Но если ваши задания постоянно терпят неудачу, вы определенно захотите выяснить, почему.

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

Ответ 4

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

Ответ 5

Вы можете просто написать на консоли (НЕ ПО ПРОИЗВОДСТВУ):

  • ps aux | grep sidekiq введите описание изображения здесь
  • тогда вам нужно убить процесс:

    kill number_of_process или kill -9 number_of_process, если это необходимо

    введите описание изображения здесь

  • теперь вы можете проверить с помощью ps aux, если еще есть sth, чтобы убить

  • start sidekiq sidekiq