J'utilise sidekiq gem pour exécuter des appels d'API en arrière-plan. J'ai exécuté sidekiq dans Daemon process comme suit:
bundle exec sidekiq -d
Maintenant que ma méthode a été modifiée, je souhaite redémarrer sidekiq. J'ai essayé de tuer le sidekiq en utilisant la commande ci-dessous:
kill -9 process_id
mais ça ne marche pas. Je veux connaître la commande pour relancer le processus sidekiq. Si vous avez une idée s'il vous plaît partager avec moi.
J'ai essayé la commande ci-dessous aussi:
sidekiqctl stop /path/to/pid file/pids/sidekiq.pid
Donc, une fois que vous avez trouvé proces_id, utilisez la commande ci-dessous, qui empêchera les travailleurs d'obtenir de nouveaux emplois et en finiront avec les emplois existants.
kill -USR1 [PROCESS_ID]
Après cela, vous pouvez les tuer
kill -TERM [PROCESS_ID]
Il existe également une page sur sidekiq/wiki à ce sujet, appelée Signals.
[modifier]
Ici est la page de signal.
[modifier]
Vérifier vidéo
Début:
$ bundle exec sidekiq -d -P tmp/sidekiq.pid -L log/sidekiq.log
où -d
démonise, -P
fichier pid, -L
fichier journal.
Arrêtez:
$ bundle exec sidekiqctl stop tmp/sidekiq.pid 0
Sidekiq shut down gracefully.
où 0
est le nombre de secondes à attendre jusqu'à la sortie de Sidekiq.
Pour que le démon continue de fonctionner, vous devez absolument avoir une bonne gestion des erreurs dans les classes HardWorker, mais vous pouvez également utiliser la commande ci-dessous pour redémarrer les coureurs sidekiq s'ils ne se trouvent pas dans les processus système.
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
Cela recherche le PID en utilisant ps aux | grep sidekiq | grep -v grep | awk '{print $2}'
et le stocke dans la variable x
. Ensuite, s'il est vide, il lancera un processus sidekiq démonisé.
Vous pouvez coller ce gars dans un travail cron ou quelque chose. Mais si vos emplois échouent continuellement, vous voudrez certainement comprendre pourquoi.
EDIT: Ajout du chemin à déployer à partir de cron.