Comment arrêter un Démon de Serveur dans les Rails?
Je suis en cours d'exécution de mon application rails à l'aide de la suite de
$script/server -d webrick
sur mon système Ubuntu , la commande ci-dessus exécutez le serveur webrick en arrière-plan . Je pourrais tuer le processus à l'aide de commande kill
$kill pid
Ne rails de fournir toute commande pour arrêter l'exécution en arrière-plan démon de serveur ?
comme celui fourni par les rails pour démarrer le serveur , Merci .
MODIFIER Quand il est approprié pour démarrer le démon de serveur ? Tout en temps réel scénario aider Merci
Vous devez vous connecter pour publier un commentaire.
Comment sur une tâche rake?
exécuter avec le râteau arrêter ou sudo râteau arrêter
kill -9
seulement lorsque le démon accroché. Sinon, vous perdrez votre unflushed de données à partir d'Active Directory caches.si elle peut être utile, sur linux, vous pouvez le trouver le processus qui est à l'aide d'un port (dans ce cas-3000), vous pouvez utiliser:
il va retourner le pid trop
lsof -i :3000
me dit le PID de l'exécution de rubykill $(lsof -i :3000 -t)
- Le -t option est synonyme de laconique qui signifie qu'il sera tout juste sortie de l'ID de processus.alias stopRails='kill -9 $(lsof -i :3000 -t)'
avecalias startRails='rails server -d'
(échouera si vous n'êtes pas dans votre répertoire app, mais c'est correct) et enfinalias restartRails='stopRails && startRails'
pid = `lsof -i :3000 -t`.chomp.to_i
(@Gerry vraiment sympa d'appel sur le-t
drapeau, j'ai appris quelque chose de nouveau aujourd'hui!)Comme Ryan a dit:
sans doute le serveur.pid est le fichier que vous voulez.
Vous devriez être en mesure d'exécuter
kill -9 $(cat tmp/pids/server.pid)
pour faire tomber un serveur automatiquement.lsof -i :3000
je obtenir le PID de ruby, puiskill -9 1406orWhateverThePIDofRubyWas
- easypeasy - Merci!L'id de processus du démon serveur est stocké dans le répertoire de votre application tmp/pid/. Vous pouvez utiliser votre standard
kill process_id
avec les informations que vous y trouvez.kill -9 $(lsof -i:3000) &> /dev/null
. La partie après&>
est facultatif--c'est juste supprime une partie de la sortie de la commande kill.La seule bon façon de tuer le Ruby on Rails serveur par défaut (qui est WEBrick) est:
Si vous utilisez Mongrel, c'est suffisant:
Utilisation
kill -9
si le démon accroché. Rappelez-vous les implications dekill -9
- si les données conservées dans Active Record caches n'étaient pas vidées sur le disque, vous perdrez vos données. (Comme je l'ai fait récemment)Dans votre terminal pour trouver l'id de processus (PID):
Ensuite, utilisez le numéro dans la colonne PID pour tuer le processus:
pguardiario me battre pour elle, même si sa mise en œuvre est un peu dangereux car il utilise
SIGKILL
au lieu de l' (recommandé)SIGINT
. Voici une tâche rake, j'ai tendance à importer dans mes projets de développement:lib/tasks/stopserver.râteau
Ce une interruption pour le serveur si et seulement si le pidfile existe. Il ne jette pas inesthétique des erreurs si le serveur n'est pas en cours d'exécution, et il vous avertit si c'est réellement arrêt du serveur.
Si vous remarquez que le serveur ne veut pas fermer à l'aide de cette tâche, ajoutez la ligne suivante après la
Process.kill "INT"
ligne, et essayez de mettre à niveau à un noyau qui a ce bug soit corrigé.(Hat tip: jackr)
Exécuter cette commande:
de sortie:
Chemin complet de ce fichier. Vérifiez votre projet de nom de répertoire pour trouver votre fichier en question, si plusieurs fichiers sont affichés dans la liste.
Puis exécutez cette commande:
x=`locate tmp/pids/server.pid` && kill `cat ${x}`
Un Rubis billet, http://bugs.ruby-lang.org/issues/4777, suggère qu'il s'agit d'un noyau (Linux) bug. Ils donnent un travail autour (essentiellement l'équivalent du Ctrl-C/Ctrl-Z), à l'utilisation si vous avez diabolisé le serveur:
cat tmp/pids/server.pid
cat tmp/pids/server.pid
Cela semble provoquer l'original INT traitement du signal, ce qui permet éventuellement de données chasse d'eau et ainsi de suite.
Ici, je laisse un bash fonction qui, si collé à vous
.bashrc
ou.zshrc
sera en alliage de vous faire des choses comme:Ici c'est la fonction:
Plus d'informations dans le post de blog j'ai écrit à ce sujet.
je ne le pense pas si vous utilisez-d. Je venais de tuer le processus.
Dans l'avenir, il suffit d'ouvrir une autre fenêtre de terminal au lieu et à l'utilisation de la commande sans l'option-d, il fournit vraiment utile de sortie de débogage.
Si c'est de la production, utilisez quelque chose comme passager ou minces, de sorte qu'ils sont faciles à arrêter le processus ou de redémarrer les serveurs
ps -e
liste de tous les processus sur le systèmegrep ruby
recherches de sortie pour le processus de rubyawk
passe le premier argument de cette sortie(pid) à
kill -INT
.Essayer avec echo au lieu de les tuer si vous voulez juste pour voir le PID.
si tuer les processus fonctionne pas, alors
supprimer le fichier du serveur.pid de MyRailsApp/tmp/pid/
Je suis venu ici parce que j'essayait de l' (unsuccesfully) arrêt normal de tuer, et je pensais que j'avais fait quelque chose de mal.
Un kill -9 est la seule façon d'arrêter de ruby on rails serveur?
Quoi!? Connaissez-vous les conséquences? Peut être une catastrophe...
Vous pouvez démarrer votre serveur dans le fond, en ajoutant
-d
de votre commande. Par exemple:Pour l'arrêter, il suffit de tuer tout ce processus est en cours d'exécution sur le port 3000: