Si les scripts vboxd vous causent autant de problèmes qu'ils m'ont fait, vous voudrez peut-être essayer ceci; c'est une solution plutôt simple, implémentée en Perl, qui fournit les mêmes fonctionnalités. Plus précisément, la machine virtuelle démarre avec le système (en supposant que le service est configuré pour démarrer automatiquement, ce qui est la valeur par défaut), et s'arrête proprement lorsque le service est arrêté.
Les principales différences par rapport à la solution vboxd, en plus d'être considérablement plus simple à gérer dans mon expérience, sont que ce script ne transmet pas de paramètre de port VRDE à VBoxHeadless, et que l'arrêt de la machine virtuelle est géré via "acpipowerbutton" plutôt que "savestate" .
Si cela ne correspond pas à vos objectifs, il est assez facile de changer; dans le premier cas, ajoutez '-e "TCP / Ports = [, port ...]"' à la chaîne de ligne de commande VBoxHeadless ($ cmd), et dans le second cas, changez simplement "acpipowerbutton" en "savestate" dans le gestionnaire SIGTERM.
Voici le script Perl:
#!/usr/bin/perl
# Service wrapper for VirtualBox VM.
use strict;
# Windows-style path pointing to your VirtualBox home directory
# (i.e., where your VirtualBox.xml lives)
my $vboxhome = 'c:\\Documents and Settings\\Aaron\\.VirtualBox';
# Cygwin path pointing to the VirtualBox install directory
my $vboxpath = '/cygdrive/c/Program Files/Oracle/VirtualBox';
# Name or UUID of your virtual machine
my $vmname = '{83dfb4b1-4243-4a07-9d37-9df5573792d8}';
$ENV{'VBOX_USER_HOME'} = $vboxhome;
my $exit_handler = sub {
print "Caught SIGTERM; shutting down VM.\n";
exec("'$vboxpath/VBoxManage.exe' controlvm $vmname acpipowerbutton");
};
$SIG{TERM} = $exit_handler;
print "[debug] pid $$\n";
# Command line for VBoxHeadless - add your VRDE port here if you want one
my $cmd = "'$vboxpath/VBoxHeadless.exe' --startvm $vmname 2>&1 1>/dev/null";
print "[debug] $cmd\n";
system($cmd);
print "VM died unexpectedly; exiting.\n";
Et voici la ligne de commande cygrunsrv que j'ai utilisée pour installer le service Windows:
cygrunsrv --install '<service-name>' --desc '<description>' \
--path '/usr/bin/perl' --args '<full-path-to-service-script>' \
--chdir '<path-to-service-script-dir>' --termsig TERM --shutsig TERM \
--preshutdown --interactive
À partir de là, il suffit de lancer 'sc start <service-name>', et vous devriez être prêt à partir - n'oubliez pas que, par défaut, les services cygrunsrv se connectent à / var / log / <service-name> .log, donc si quelque chose se comporte mal, c'est le premier endroit pour chercher une raison.
Une chose à garder à l'esprit est que, lorsque vous exécutez la machine virtuelle de cette façon, elle s'exécutera sous le compte SYSTEM intégré, plutôt que le vôtre. Cela étant, vous ne pourrez pas administrer la machine virtuelle via la console VirtualBox pendant qu'elle s'exécute en tant que service; il semblera être dans l'état "Éteint" et vous ne pourrez pas accéder à ses paramètres. (Il n'est pas recommandé d' essayer de mettre la VM sous tension en tant que service - je ne sais pas ce qui se passera, mais au mieux, ce sera une absence d'opération, et au pire, cela va arroser votre VM.) Si vous devez modifier les paramètres de la machine virtuelle ou accéder à la console, arrêtez d'abord le service (et attendez que VBoxHeadless.exe se termine), puis configurez-le / mettez-le sous tension dans la console VirtualBox comme vous le feriez normalement.
Vous pouvez probablement résoudre ce problème en installant un deuxième service interactif pour exécuter la console VirtualBox; car cela exécuterait également la console sous le compte SYSTEM, il serait probablement en mesure de voir et de gérer la machine virtuelle en cours d'exécution. Je n'ai pas eu besoin de le faire moi-même, donc je ne suis pas sûr que cela fonctionnerait, mais je ne vois pas pourquoi cela ne fonctionnerait pas. (Si vous l'essayez, j'apprécierais un commentaire à cette réponse, me faisant savoir comment cela a fonctionné pour vous. Merci!)
J'espère que cela t'aides!