J'essaie d'obtenir Mac OS X pour enregistrer toutes mes machines virtuelles VirtualBox lors de son redémarrage. J'ai déjà un script qui fait cela, mais j'ai besoin d'OS X pour exécuter ce script automatiquement avant un redémarrage.
Lorsque Mac OS X redémarre, exécute-t-il / sbin / reboot?
Ou comment pourrait-on y parvenir autrement?
/etc/rc.shutdown.local
pour l'exécuter lors de l'arrêt. Il semble que c'est ce que vous recherchez.Réponses:
Bien qu'Apple recommande d'utiliser " launchd ", le plus simple est de créer un script shell en utilisant, par exemple, le pico de Terminal:
Le fichier peut contenir quelque chose comme:
Donnez ensuite des droits d'exécution:
Enfin, connectez le script à la procédure de déconnexion:
Si vous démarrez une autre application, comme je n'ai pas testé cela, je pense qu'il pourrait être utile de m'avertir et de vous avertir que:
Nous pourrions avoir besoin de tuer le signal d'arrêt pour exécuter ce que nous voulons;
Envoyez ensuite un nouveau (attention à ne pas tuer le signal envoyé par notre propre
script)…
Si vous souhaitez retirer le crochet:
Si vous utilisez " launchd ", l'idée serait de capturer le signal SIGTERM. Jetez un œil à: /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist
la source
Launchd envoie une alerte précoce d'arrêts à tous les scripts / démons qui ont un sous-programme StopService () . Cela donne à votre processus le plus de temps pour nettoyer.
Utilisez simplement launchd pour démarrer le script et l'exécuter en arrière-plan jusqu'à ce qu'il soit temps de quitter.
Après la fermeture des services qui ont reçu l'alerte précoce, tous les processus reçoivent un
SIGTERM
signal quelques secondes avant de lesSIGKILL
neutraliser.Vous pouvez créer un script qui dort et intercepte SIGTERM pour exécuter votre commande le moment venu. Vous devrez voir si cela laisse suffisamment de temps en pratique pour que les commandes s'exécutent. Cela évite un peu de codage, mais pas beaucoup - il est généralement préférable de simplement créer un démon à partir d'un script shell.
D'un point de vue historique -
/sbin/reboot
et les niveaux d'exécution n'ont jamais existé sur Darwin / OS X etrc.shutdown
sont déconseillés avec le reste derc
maintenant quilaunchd
est le patron. Vous pourriez peut-être utiliser rc.shutdown sur tiger ou plus tôt (je n'ai pas une de ces images à portée de main pour vérifier actuellement) Lion a certainement supprimé tous les vestiges de rc.d et init.d.Vous voudrez peut-être voir si le somnifère pourrait vous aider dans votre cas. Je ne l'ai pas utilisé depuis longtemps - mais il vise certainement à résoudre votre dilemme.
la source