1 votes

Exécuter le script à l'extinction

J'ai le script suivant, comment puis-je le faire fonctionner à l'arrêt dans debian linux? (ne veux pas utiliser l'interface graphique)

#!/bin/bash
vms=$(vmrun list | grep '/');
for vm in ${vms}
do
        echo 'mise en veille ' $vm
        vmrun suspend $vm soft
done

J'ai essayé de l'ajouter à /usr/local/bin avec les autorisations chmod +x. Ensuite j'ai créé des liens symboliques vers rc0.d (arrêt) et rc6.d (redémarrage).

Ensuite j'ai exécuté update-rc.d shutdown_vms 0 6 .

Quand j'utilise shutdown -r maintenant, cela bascule en mode console pour redémarrer....à ce moment-là je vois un message d'erreur indiquant que shutdown_vms a échoué.

Est-ce la bonne façon d'installer le script d'arrêt et pourquoi échoue-t-il (où regarder dans les journaux?)

Modifier: J'ai utilisé la commande update-rc.d -f shutdown_vms start 0 0 6 .

Quand je regarde la liste de démarrage pour rc0.d (arrêt), je vois que shutdown_vms, vmware et gdm sont tous à l'ordre 0. Je pense que si gdm est exécuté avant shutdown_vms, il tuera les vms. Je pense que c'est ce qui se passe car quand je vérifie le nombre de vms en cours d'exécution lorsque le script est exécuté, il enregistre 0.

Puis-je changer l'ordre de gdm/vmware à 1 pour que shutdown_vms s'exécute en premier?

3voto

Nils Points 7622

Cela ressemble à quelque chose que vous devriez mettre dans un script d'initialisation approprié en tant que méthode "stop". Votre script actuel échoue probablement en raison d'un code de sortie qui n'est pas égal à zéro.

En dehors de cela, vous devriez mettre "$()" entre guillemets car votre liste de machines virtuelles contient probablement des espaces blancs.

Testez votre script en utilisant sh -x VOTRESCRIPT stop.

2voto

user96016 Points 1

Essayez d'ajouter: exit 0 sous fait.

donc on dirait que gdm fait cela pendant le processus d'arrêt. peut-être qu'une meilleure façon est que vous laissez votre script VMs tester s'il est vraiment nécessaire de passer par la procédure d'arrêt. Dans ce cas, il ne fait rien pour arrêter un processus inexistant. Ce processus inexistant a probablement causé votre message d'erreur.

1voto

jeffreypriebe Points 1070

Avez-vous nommé le fichier en commençant par un 'K' dans les répertoires /etc/rc[06].d ? Sinon, ils ne seront pas exécutés à l'arrêt.

0voto

jeffreypriebe Points 1070

Hmmmm...Ce serait bien si la sortie d'échec pouvait être affichée. Cela clarifierait probablement facilement quelques choses.

Une autre idée, essayez d'ajouter une déclaration PATH juste après #!/bin/sh.

 #! /bin/sh
 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:.....
 export PATH
 .
 .   (rest of script)
 .
 exit 0

Je ne suis pas familier avec vmlist.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X