यदि vboxd स्क्रिप्ट आपको उतनी ही परेशानी दे रही है जितनी उन्होंने मुझे दी थी, तो आप यह कोशिश करना चाहें; यह एक सरल समाधान है, जिसे पर्ल में लागू किया गया है, जो समान कार्यक्षमता प्रदान करता है। विशेष रूप से, वीएम सिस्टम के साथ शुरू होता है (यह मानते हुए कि सेवा स्वचालित रूप से शुरू करने के लिए सेट है, जो डिफ़ॉल्ट है), और सेवा बंद होने पर सफाई से नीचे चला जाता है।
मेरे अनुभव से निपटने के लिए काफी सरल होने के कारण, vboxd समाधान के प्रमुख अंतर, यह है कि यह स्क्रिप्ट VBoxHeadless के लिए एक वीआरडीई पोर्ट सेटिंग पास नहीं करता है, और यह कि वीएम शटडाउन को "सेवरिपेट" के बजाय "एसीपीपॉवरटन" के माध्यम से नियंत्रित किया जाता है। ।
यदि यह आपके उद्देश्यों के अनुरूप नहीं है, तो इसे बदलना काफी आसान है; पहले मामले में, VBoxHeadless कमांड लाइन स्ट्रिंग ($ cmd) में '-e "टीसीपी / पोर्ट्स = [, पोर्ट ...]" "जोड़ें और दूसरे मामले में," एसपीपॉवरबटन "को" सेवेस्टेट "में बदलें। SIGTERM हैंडलर।
यहाँ पर्ल स्क्रिप्ट है:
#!/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";
और यहाँ पर cygrunsrv कमांड लाइन है जिसका उपयोग मैंने विंडोज सेवा को स्थापित करने के लिए किया था:
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
वहां से, यह केवल 'sc start <सेवा-नाम>' जारी करने का मामला होना चाहिए, और आपको जाने के लिए अच्छा होना चाहिए - यह याद रखें कि, डिफ़ॉल्ट रूप से, cygrunsrv सेवाएँ लॉग / var / log / <सेवा-नाम> में लॉग इन करती हैं .log, इसलिए अगर कुछ भी गलत व्यवहार करता है, तो वह पहली जगह है जो एक कारण की तलाश में है।
एक बात का ध्यान रखें कि, जब आप VM को इस तरह से चलाते हैं, तो यह आपके स्वयं के बजाय अंतर्निहित सिस्टम खाते के तहत चलेगा। यह मामला होने के नाते, आप VMBox को वर्चुअलबॉक्स कंसोल के माध्यम से प्रबंधित नहीं कर पाएंगे, जबकि यह एक सेवा के रूप में चल रहा है; यह "संचालित बंद" स्थिति में प्रतीत होगा, और आप इसकी सेटिंग में नहीं जा पाएंगे। (एक सेवा के रूप में चलने के दौरान वीएम पर बिजली की कोशिश करना अनुशंसित नहीं है - मुझे नहीं पता कि क्या होगा, लेकिन सबसे अच्छा यह एक नो-ऑप होगा, और सबसे खराब रूप से यह आपके वीएम को नली देगा।) यदि आपको वीएम की सेटिंग्स को बदलने या कंसोल तक पहुंचने की आवश्यकता है, तो पहले सेवा को रोकें (और बाहर निकलने के लिए VBoxHeadless.exe की प्रतीक्षा करें), और फिर इसे कॉन्फ़िगर करें / वर्चुअलबॉक्स कंसोल में इसे पावर करें जैसा कि आप सामान्य रूप से करेंगे।
आप शायद वर्चुअलबॉक्स कंसोल को चलाने के लिए दूसरी इंटरेक्टिव सेवा स्थापित करके इस समस्या को हल कर सकते हैं; चूंकि वह कंसोल को सिस्टम खाते के तहत भी चलाएगा, इसलिए यह संभवतः चल रहे वीएम को देखने और प्रबंधित करने में सक्षम होगा। मुझे खुद ऐसा करने की आवश्यकता नहीं थी, इसलिए मुझे यकीन नहीं है कि यह काम करेगा, लेकिन मुझे ऐसा नहीं लगता है। (यदि आप इसे आज़माते हैं, तो मैं इस उत्तर के लिए एक टिप्पणी की सराहना करूँगा, मुझे बताएं कि यह आपके लिए कैसे काम करता है। धन्यवाद!)
उम्मीद है की यह मदद करेगा!