2010-08-16 6 views
2

Je suis un débutant en script Bash mais je suis un apprenti rapide. Habituellement. J'essaye d'écrire un script pour tuer et redémarrer une instance de Hudson - il doit être redémarré pour prendre en compte les changements dans les variables d'environnement. Ce que j'ai jusqu'à présent:Script Bash pour tuer et redémarrer Hudson

#!/bin/bash 
h=`pgrep -f hudson` 
if test "$h" != ""; then 
    kill $h 
    while [ "$h" != "" ]; do 
    sleep 1 
    unset h 
    h=`pgrep -f hudson` 
    done 
fi 
java -jar ~/hudson/hudson.war & 

Le script détermine correctement le fonctionnement PID par exemple Hudson et le tue. Cependant, il attend juste après la ligne "kill" et ne continue pas. Si j'appuie sur une touche à cet endroit, cela met fin au processus et ferme le script, sans même parvenir à la boucle while. Clairement, il me manque quelque chose sur la façon dont le processus devrait être tué. Ce n'est pas que le processus d'Hudson est suspendu et ne répond pas à "tuer"; il sort normalement, juste pas avant que j'intervienne.

Je suis également sûr que cela pourrait être beaucoup plus efficace, mais maintenant je voudrais juste comprendre où je me trompe.

Merci d'avance.

Répondre

4

Cela représente quelques améliorations simples à votre script:

#!/bin/bash 
h=$(pgrep -f hudson) # $() is preferred over backticks 
if [[ -n $h ]]; then # this checks whether a variable is non-empty 
    kill $h 
    while [[ -n $h ]]; do 
    sleep 1 
    h=$(pgrep -f hudson) # it's usually unnecessary to unset a variable before you set it 
    done 
fi 
java -jar ~/hudson/hudson.war & 

Cependant, il est probable que ce soit tout ce que vous avez besoin (ou utiliser l'installation à condition que mrooney referred to):

while pkill hudson; do sleep 1; done 
java -jar ~/hudson/hudson.war & 
+0

Merci pour les conseils bash et le meilleur refactor. – AndrewRich

2

Que diriez-vous d'être agréable à Hudson et laissez-le se fermer. J'ai trouvé la déclaration suivante dans le Hudson forum:

J'ajouté http://server/hudson/exit à 1,161. L'accès à cette URL entraîne l'arrêt de la machine virtuelle exécutant Hudson.

Vous pouvez appeler l'URL avec wget. Vous pouvez toujours tuer Hudson s'il ne s'éteint pas au bon moment.

EDIT: J'ai juste trébuché sur another thread, avec des options de redémarrage intéressantes. Il utilise les commandes de la build dans le serveur Winstone. Vous ne savez pas si les modifications apportées aux variables d'environnement seront prises en compte.

+0

Merci pour les informations supplémentaires. Cela sera utile. – AndrewRich