web-dev-qa-db-fra.com

Fermer gracieusement les processus sidekiq

Est-ce que quelqu'un sait comment trouver le pidfile de sidekiq pour le fermer en douceur? Exécuter ps ax | grep sidekiq, puis exécuter sidekiqctl stop <pid from grep> donne systématiquement une erreur no such pidfile? Cntl-C et Cntl-D semblent également n'avoir aucun effet.

Fermer la fenêtre de processus et rouvrir une nouvelle fenêtre ne tue pas le processus car il semble fonctionner en tant que démon.

Le seul correctif cohérent que j'ai trouvé est le redémarrage.

25
user1627827

Utilisez ceci pour tuer Sidekiq avec force.

ps -ef | grep sidekiq | grep -v grep | awk '{print $2}' | xargs kill -9
62
Paritosh Piplewar

Sidekiq offre la possibilité de spécifier un pidfile au moment du démarrage ou, comme indiqué ci-dessous, de créer le pidfile après le démarrage du processus. Dans les deux cas, vous pouvez utiliser le fichier pidfile au moment de l’arrêt.

  1. Utilisez ps -ef | grep sidekiq pour trouver le pid
  2. Créez un fichier (par exemple, sidekiq.pid) avec le seul contenu correspondant au pid que vous venez de trouver.
  3. sidekiqctl stop <pidfile_name>
  4. Utilisez -P <pidfile_name> ou --pidfile <pidfile_name> lors du prochain démarrage de sidekiq
33
eebbesen

Je viens de regarder dans celui-ci moi-même ...

On dirait que les nouvelles versions de Sidekiq intègrent ceci:

https://github.com/mperham/sidekiq/wiki/Signals

kill -USR1 [PROCESS_ID]

A bien fonctionné pour moi. Les ouvriers ont cessé de chercher de nouveaux emplois, mais ont terminé ceux sur lesquels ils travaillaient, puis j'ai finalement mis fin au processus.

kill -TERM [PROCESS_ID]

17
dazoakley

J'ai écrit un petit gestionnaire qui peut démarrer ou arrêter sidekiq.

start_stop_sidekiq.sh

#!/bin/bash
cmd=$1
PROJECT_DIR=$2
PIDFILE=$PROJECT_DIR/tmp/pids/sidekiq.pid
cd $PROJECT_DIR

start_function(){
  LOGFILE=$PROJECT_DIR/log/sidekiq.log
  echo "Starting sidekiq..."
  bundle exec sidekiq -d -L $LOGFILE -P $PIDFILE -q mailer,5 -q default -e production
}

stop_function(){
  if [ ! -f $PIDFILE ]; then
    ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}'  > $PIDFILE
  fi
  bundle exec sidekiqctl stop $PIDFILE
}

case "$cmd" in
  start)
    start_function
    ;;
  stop)
    stop_function
    ;;
  restart)
    stop_function && start_function;
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart} /path/to/Rails/app"
esac

Enregistrez-le, tapez chmod +x start_stop_sidekiq.sh. Ensuite, exécutez-le simplement avec:

bash start_stop_sidekiq.sh start /path/to/your/Rails/app

ou

bash start_stop_sidekiq.sh stop /path/to/your/Rails/app

Si vous ne possédez qu'une seule application Rails, vous pouvez également définir la variable $ PROJECT_DIR de manière statique afin que vous n'ayez pas besoin de spécifier le chemin à chaque fois. J'espère que cela t'aides!

4
DaniG2k

Si vous aimez les bashes ...

scripts/stop_sidekiq.sh

#!/bin/bash
DIR="$( cd "$( dirname "$0" )" && pwd )"

PROJECT_DIR=$DIR/../ # EDIT HERE: rel path to your project form this file location (my scripts are in ./scripts/)
SIDEKIQ_PID_FILE=$PROJECT_DIR/tmp/pids/sidekiq.pid  # EDIT HERE: pid file location

if [ ! -f $SIDEKIQ_PID_FILE ]; then
    # if no pid file, retrieve pid and create file
    ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}'  > $SIDEKIQ_PID_FILE
fi

(cd $PROJECT_DIR && bundle exec sidekiqctl stop $SIDEKIQ_PID_FILE)

Remarques:

  • fonctionnera même si sidekiq a commencé sans argument de fichier pid
  • suppose que ce script se trouve dans un dossier du projet et que les fichiers pid sont stockés dans ./tmp/pids/ 
2
laffuste

Essayez d'utiliser dieu pour surveiller sidekiq.

Ensuite, tout ce que vous avez à faire est 

Alternativement, vous pouvez utiliser: Sidekiqctl stop 60

1
Henley Chiu

Partager un script bash qui vérifie si sidekiq est en cours d'exécution, l'envoie à TSTP pour lui demander de ne pas récupérer de nouveaux travaux, attend que tous les travaux en cours soient terminés, puis arrête le processus en envoyant un signal TERM.

https://Gist.github.com/kamilbednarz/5ea6398af2a7537aa8feb5a63f3acf2f

0
Kamil Bednarz