J'ai une machine exécutant quelques VM vagabonds. Le problème que j'ai est que parfois j'oublie d'arrêter ces VM avant d'arrêter ou de redémarrer ma machine. À cause de cela, ma machine est bloquée avec ce message:waiting for vboxnet0 to become free
J'ai cherché des solutions et j'ai trouvé cette page:
http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
J'ai essayé ce qu'ils arrêtaient, mais cela ne fonctionne pas.
J'ai écrit un fichier sh pour cette commande:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
Aucune suggestion?
shutdown
reboot
execute-command
SERPRO
la source
la source
Réponses:
Si vos machines virtuelles errantes utilisent VirtualBox, vous pouvez modifier / etc / default / virtualbox et changer la ligne qui lit:
SHUTDOWN_USERS=""
à
SHUTDOWN_USERS="all"
Cela m'a corrigé sur Ubuntu 14.04
la source
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
au lieu deSHUTDOWN_USERS="all"
/etc/default/virtualbox
fichier ...Pour exécuter un script à l'arrêt ou au redémarrage:
sudo chmod +x K99_script
Remarques:
la source
la source
Comment le faire avec Systemd (c'est plus facile)
Maintenant que les variantes d'Ubuntu et Mint sont passées à systemd, j'ai trouvé que mes anciennes solutions basées sur ce qui précède étaient moins satisfaisantes. J'ai cherché sur le Web pour savoir comment le faire avec systemd et j'ai fini par combiner la sagesse des autres et la documenter sous la forme d'un article de blog sur blogspot.com.au contenant le tutoriel suivant.
Avec systemd, vous créez un ou deux fichiers pour appeler vos scripts à l'aide des modèles ci-dessous et exécutez quelques commandes. Facile.
Version GUI
Créez d' abord les scripts que vous souhaitez exécuter au démarrage et / ou à l'arrêt. Faites-en un si vous n'avez pas besoin des deux. J'ai créé .scopening_atstart et .scfullcopy_atend.
Ensuite , assurez - vous qu'ils sont à la fois exécutable en cliquant droit sur le fichier, la sélection des propriétés et faire en sorte que, dans les autorisations, vous avez coché Autoriser l' exécution du fichier comme un programme.
Les deux fichiers que j'ai créés remplissent et enregistrent le contenu d'un disque virtuel. Ils créent également un fichier dans mon répertoire personnel pour prouver que le service fonctionne. Ils étaient de la forme:
J'ai ensuite ouvert mon gestionnaire de fichiers en tant que root, ouvert
/etc/systemd/system
et créé un fichier startup.service et un fichier save-ramdisk.service. Évidemment, vous pouvez choisir vos propres noms et les noms génériques auraient pu inclure un fichier de démarrage appelé johns_start.service et un fichier d'arrêt appelé johns_shutdown.service. Ne choisissez pas les noms de service existants.et
Vous pouvez utiliser les mêmes fichiers de service, en substituant le chemin complet de votre script exécutable au mien.
Enfin pour chacun, exécutez la commande systemctl activez votre_nom_fichiers (mais sans le service de suffixe). Donc ma première était
systemctl enable startup
Redémarrez l'ordinateur une fois pour démarrer les services. Le service de démarrage sera exécuté chaque fois que systemd entre dans la cible multi-utilisateurs et le service d'arrêt lorsqu'il quitte la cible multi-utilisateurs. Des fichiers de service alternatifs avec différentes conditions d'activation seront décrits ci-dessous.
Les commandes utiles supplémentaires incluent:
systemctl est un démarrage activé
systemctl est un démarrage actif
systemctl redémarre le démarrage
Plus d'informations peuvent être trouvées à la référence ci-dessus.
Version CLI (ligne de commande)
Cette description suppose que vous opérez à partir de votre répertoire personnel plutôt que / home / john, utilisez sudo au besoin et votre choix d'éditeur où j'écris vim ou svim.
Créez des scripts shell de démarrage et d'arrêt avec la première ligne
#!/bin/sh
et rendez-les exécutables à l'aide dechmod +x my_new_filename
.Créez deux fichiers comme ci-dessus, ou dans cet exemple, un fichier pour gérer les tâches de démarrage et d'arrêt. J'exécuterai des scripts dans mon répertoire personnel mais @don_crissti montre quelques alternatives sur Stack Exchange .
et copiez dans le contenu du fichier:
Activez ensuite le service avec la commande:
et redémarrez votre système après quoi les services seront actifs. Les commandes
systemctl is-enabled start_and_stop
etsystemctl is-active start_and_stop
peuvent être utilisées pour surveiller vos nouveaux services.Modification des conditions de déclenchement pour l'arrêt
Les fichiers utilisent avant tout l'ouverture ou la fermeture de l'environnement multi-utilisateur pour lancer l'exécution des scripts. Le fichier ci-dessous utilise le début de quatre processus d'arrêt potentiels pour lancer ses scripts. L'ajout ou la suppression des cibles sur la ligne Avant + la ligne WantedBy vous permettra de faire des distinctions plus fines:
Ce fichier a été proposé dans la deuxième réponse de ce post, mais je n'ai pas pu le faire fonctionner avant d'avoir ajouté une section d'installation.
Encore une fois, modifiez le script
/etc/systemd/service/
et activez-le à l'aide desystemctl enable your_file_name
. Lorsque j'ai changé les cibles, j'ai utilisé lasystemclt disable file_name
commande, puis je l'ai réactivée, ce qui l'a liée aux répertoires cibles. Redémarrez et le service sera opérationnel.la source
Créez un fichier exécutable shell avec votre script dans le répertoire /etc/init.d/.
Étant donné que cela doit être exécuté pendant l'arrêt ou le redémarrage, vous devez créer des liens logiciels dans /etc/rc0.d/ et /etc/rc6.d
Exemple:
la source
chmod
modifie les drapeaux d'autorisation de la cible du lien, qui est le même pour les deux arguments. Les spécifier tous les deux est redondant.Vous pouvez trouver une solution ici: Suspendre / reprendre toutes les cases Vagrant à l'arrêt / démarrage du système .
Il existe un simple script d'initialisation qui suspend toutes les boîtes en cours d'exécution avant de s'arrêter.
Installation
Modifiez
/etc/init.d/vagrant-boxes
et collez le script de l'article ci-dessus et enregistrez. Ou téléchargez-le ici et enregistrez-le dans/etc/init.d/vagrant-boxes
. Sur debian / ubuntu, etc., exécutezla source
Pour Ubuntu 14.10 vous quelque chose comme
RC04
pasRC99
Que faire à partir de zéro
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Étapes que j'ai traversées
la source