5 votes

sleep in upstart script (synchronisme upstart)

J'ai écrit ce code pour démarrer automatiquement la machine virtuelle KVM au démarrage du système hôte, et arrêter la machine virtuelle à l'arrêt ou au redémarrage du système hôte.

start on startup
start on started networking and started qemu-kvm and started libvirt-bin
stop on runlevel [016]

kill timeout 70
expect fork

pre-start exec /KVM/luc.sh prepara

exec /KVM/luc.sh avvia

pre-stop script 
   /KVM/luc.sh ferma
   /bin/sleep 20
end script

luc.sh est un script avec ces fonctions :

  • prepara() - préparer l'environnement
  • avvia() - démarrer KVM
  • ferma() - arrête la KVM

Cela fonctionne sauf pour le sleep commande. Je dois retarder l'opération d'arrêt/redémarrage du système hôte pour attendre que l'arrêt de l'invité soit terminé. En d'autres termes, je veux insérer une attente de ~20 sec après l'opération de redémarrage de l'invité. /KVM/luc.sh ferma commande. Il semble que la sleep dans le script de démarrage est asynchrone. Est-il possible de faire un appel synchrone dans le script de démarrage ?

2voto

ftt Points 121

Oui, d'une manière ou d'une autre, le sommeil ne fonctionne pas pour moi non plus (j'utilise Ubuntu 10.04). Je ne suis pas sûr que la solution suivante soit la meilleure, mais elle semble fonctionner.

  1. Créez une tâche upstart supplémentaire, disons, post-sleep.conf (journalisation ajoutée pour plus de clarté) :

    description "Sleep when the job finishes"
    
    task
    
    script
        echo "Sleeping..." | logger -t "post-sleep-job"
        /bin/sleep 60s
        echo "Done sleeping" | logger -t "post-sleep-job"
    end script
  2. Ajoutez ce qui suit à la tâche qui doit être mise en veille après l'arrêt :

    post-stop script
        start post-sleep
    end script

Utilisez instances dans le premier script si plusieurs travaux doivent attendre avant l'arrêt complet. Cependant, je pense qu'une solution encore meilleure et plus robuste serait de s'appuyer sur événements .

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