Comment redémarrer mon serveur Unicorn?

J’ai un serveur qui exécute Unicorn et nginx. Je viens juste de faire un git pull pour obtenir les dernières mises à jour de mon propre code, et maintenant je dois le redémarrer.

En le mettant en place, j’ai suivi ce guide et ai fait ces étapes:

Commencer la Licorne

 cd /var/www/my_server unicorn -c unicorn.rb -D 

Redémarrez nginx

 service nginx restart 

J’ai maintenant besoin de savoir comment le redémarrer. Idéalement, cela devrait être un processus rapide, de sorte que mon serveur n’a pas beaucoup de temps d’arrêt pour le faire à l’avenir.

EDIT: J’ai essayé quelques autres choses comme suggéré ailleurs, comme killall ruby , et redémarrer mon serveur. Maintenant, je suis à un point où j’ai fait ce qui précède, cela ne me donne aucune erreur, mais quand j’essaie de charger une page, elle ne répond pas, et finit probablement par expirer (bien que je n’ai pas laissez-le aussi longtemps). Si j’arrête nginx, il est dit “connexion refusée”, il est donc évident que nginx fonctionne, mais pour une raison quelconque, il ne peut pas se connecter à Unicorn.

EDIT: Sur un coup de tête, j’ai tapé juste unicorn et il semble y avoir un problème avec mon projet – gemmes manquantes. Logique. Pour que le premier assembly ne soit plus un problème, je suis toujours intéressé par la manière la plus élégante de le redémarrer.

Je recommande d’utiliser le script d’initialisation qu’ils fournissent

Un exemple de script init est dissortingbué avec Unicorn:
http://unicorn.bogomips.org/examples/init.sh

parce que vous avez la méthode de upgrade qui prend en charge votre cas d’utilisation, en redémarrant l’application avec aucun temps d’arrêt.

 ... upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $old_pid && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $old_pid then echo >&2 "$old_pid still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi ... 

Vous pouvez essayer d’envoyer un signal HUP au processus maître, en faisant

  kill -HUP  

HUP – recharge le fichier de configuration et redémarre gracieusement tous les utilisateurs. Si la directive “preload_app” est fausse (la valeur par défaut), les travailleurs récupèrent également les modifications du code de l’application au redémarrage. Si “preload_app” est vrai, les modifications du code de l’application n’auront aucun effet. USR2 + QUIT (voir ci-dessous) doit être utilisé pour charger un code plus récent dans ce cas. Lors du rechargement de l’application, + Gem.refresh + sera appelé ainsi le code mis à jour pour votre application peut récupérer les RubyGems nouvellement installés. Il est déconseillé de désinstaller les bibliothèques dont votre application dépend au cours de l’exécution d’Unicorn, car les employés ré-inscrits peuvent entrer une boucle d’apparition lorsqu’ils ne parviennent pas à charger une dépendance désinstallée.

Si vous voulez en savoir plus sur les signaux de licorne, vous pouvez en lire plus ici

Sur Ubuntu 14.04 essayez

 sudo service unicorn restart 

Si vous utilisez capistrano, ajoutez ceci dans deploy.rb

 desc "Zero-downtime restart of Unicorn" task :restart, :except => { :no_release => true } do run "kill -s USR2 unicorn_pid" end