আমি একটি আপস্টার্ট কাজ, একটি শুরু এবং স্টপ স্ক্রিপ্ট সহ আরও পরিশীলিত পদ্ধতির প্রস্তাব করব। উদাহরণস্বরূপ আমি উইন্ডোজ এক্সপি ব্যবহার করছি, যেমন আমার হোম ডিরেক্টরিটি টমবার্ট ব্যবহার করতে দেয় ... যা আপনার সেই অনুযায়ী পরিবর্তন করা উচিত। আপনি যা কিছু করেন তার সুবিধা রয়েছে (রিবুট, শাটডাউন, পাওয়ার বোতাম টিপানো) এটি আপনার ভার্চুয়াল মেশিনটিকে দুর্দান্তভাবে পরিচালনা করে ।
প্রথমে আপস্টার্ট কাজ, /etc/init/winxpvm.conf- এ রাখুন:
description "WinXP VirtualBox job"
author "Thomas Perschak"
## 0: system halt
## 1: single-user mode
## 2: graphical multi-user plus networking
## 6: system reboot
start on started rc RUNLEVEL=[2]
stop on starting rc RUNLEVEL=[!2]
## upstart config
kill timeout 120
kill signal SIGCONT
nice -10
## start WinXP VirtualBox
exec /home/tombert/scripts/winxpvm-start.sh
## stop WinXP VirtualBox
pre-stop exec /home/tombert/scripts/winxpvm-stop.sh
আপস্টার্ট কাজটি রানলেভেল 2 (যা গ্রাফিকাল মোডে রয়েছে) এ ভার্চুয়াল মেশিন শুরু করে, এবং আমার ক্ষেত্রে এটি অগ্রাধিকারটি বৃদ্ধি করে nice
। ভার্চুয়াল মেশিনটি সুন্দরভাবে বন্ধ করার জন্য আমার kill signal SIGCONT
বিবৃতিটি ব্যবহার করে আপস্টার্ট সমাপ্তি "অক্ষম" করতে হবে । এটি ভার্চুয়াল মেশিনটিকে প্রথমে চলতে দেয় (ডিফল্ট এড়ানো SIGTERM
)। 120 সেকেন্ড পরে SIGKILL
যেকোন উপায়ে প্রেরণ করা হয়। পরিবর্তে আমি winxpvm-stop.sh
স্ক্রিপ্ট চালাচ্ছি ।
সাইড-নোট 1: স্তবকগুলি start on started runlevel [2]
এবং stop on starting runlevel [!2]
কাজ করে না। একটি নির্দিষ্টভাবে কাজ উল্লেখ করতে হবে rc
।
পার্শ্ব-নোট 2: আপস্টার্ট ম্যানুয়াল থেকে কী বিভ্রান্ত করছে: kill signal
স্তবকটি 5 সেকেন্ডের পরে প্রেরিত সিগন্যালটি নির্দিষ্ট করে। এই উদাহরণে আমি এটি SIGTERM
(ডিফল্ট) থেকে সিগকন্টে সেট করেছি - তবে 5 সেকেন্ডের সময়সীমাটি আমি পরিবর্তন করতে পারিনি। kill timeout
স্তবক সময়সীমার পরে যা নির্দিষ্ট করে SIGKILL
যা সংকেত একটিকে পরিবর্তন করতে পারবেন না - পাঠানো হয়। উন্নতি হ'ল নতুন স্তব term signal
এবং সংজ্ঞা দেওয়া হবে term timeout
।
এখানে শুরু স্ক্রিপ্ট winxpvm-start.sh:
#! /bin/bash -e
function dostart()
{
echo -n "Running WinXP ... "
vboxheadless --startvm WinXP
echo "now closed"
}
export -f dostart
if [ $(whoami) != "tombert" ]; then
su -c dostart tombert
else
dostart
fi
যেহেতু সব সেটিংস ইত্যাদি ব্যবহারকারী মোড মধ্যে সম্পন্ন করা হয় (আমার লগইন হল tombert ), এমনকি যখন রুট হিসাবে চালাতে আমি অ্যাকাউন্ট পরিবর্তন tombert । অবশ্যই ব্যবহারকারী আপস্টার্ট কনফিগারেশনে পরিবর্তন করা যেতে পারে তবে এই সমাধানটি কনসোল থেকে ভার্চুয়াল মেশিনটি "হাত ধরে" শুরু / বন্ধ করার বিকল্প ছেড়ে দেয়।
আরও আকর্ষণীয় হ'ল winxpvm-stop.sh এর শাটডাউন স্ক্রিপ্ট:
#! /bin/bash
function dostop()
{
## check if WinXP is running
vboxmanage showvminfo WinXP --machinereadable | grep -q 'VMState="running"' &> /dev/null
if [ $? -ne 0 ]; then
echo "WinXP not running"
exit
fi
## try gracefully shutdown
echo -n "Shutting down WinXP ... "
#vboxmanage controlvm WinXP acpipowerbutton
vboxmanage guestcontrol WinXP execute --image "%SystemRoot%\system32\shutdown.exe" --username tombert --password <mypassword> --wait-exit -- "-s" "-f" "-t" "0" &> /dev/null
## check vm status
INDEX=60
while [ $INDEX -gt 0 ]; do
echo -n "$INDEX "
vboxmanage showvminfo WinXP --machinereadable | grep -q 'VMState="running"' &> /dev/null
if [ $? -ne 0 ]; then
echo "gracefully done"
break
fi
sleep 1
let INDEX+=-1
done
## close forcefully
if [ $INDEX -eq 0 ]; then
vboxmanage controlvm WinXP poweroff &> /dev/null
echo "forcefully done"
fi
}
export -f dostop
if [ $(whoami) != "tombert" ]; then
su -c dostop tombert
else
dostop
fi
প্রথমে আমি শুরু স্ক্রিপ্টের মতোই করি - আমি ব্যবহারকারীকে মূল থেকে আমার অ্যাকাউন্ট টমবার্টে পরিবর্তন করছি । এখন ফাংশনটি দেখতে দিন dostop
। প্রথমে আমি যাচ্ছি যে ভার্চুয়াল মেশিনটি এমনকি চলমান কিনা even তারপরে আমি সরাসরি উইনএক্সপি ব্যবহার করে একটি শাটডাউন প্রেরণ করে "নরমভাবে" শাটডাউন করার চেষ্টা করছি guestcontrol
। এখানে আপনাকে অবশ্যই WinXP অ্যাকাউন্টের শংসাপত্রাদি সরবরাহ করতে হবে, আমার ক্ষেত্রে টমবার্ট এবং একটি পাসওয়ার্ড। উইন্ডোজ shutdown
কৌতূহলীভাবে সমস্ত অ্যাপ্লিকেশন বন্ধ করবে এবং অপারেটিং সিস্টেমটি (সাধারণত) বন্ধ করে দেবে। তারপর একটানা ভার্চুয়াল মেশিন অবস্থা পরীক্ষা করুন ব্যবহার করতে দেয় showvminfo
। 1 সেকেন্ড টাইমআউট দিয়ে কমপক্ষে 60 বার এটি করার (আপনি যা মনে করেন অ্যাপ্রোপিয়েট এখানে রয়েছে তা করুন) ভার্চুয়াল মেশিনটিকে নিখুঁতভাবে বন্ধ করার জন্য যথেষ্ট সময় দেওয়া উচিত। নোট করুন যে কলshowvminfo
এছাড়াও একটি সেকেন্ডের চেয়ে কিছুটা কম সময় নেয় (কমপক্ষে আমার কম্পিউটারে) সুতরাং এটি আমার ক্ষেত্রে এটি ~ 120 সেকেন্ড দেয়। সবকিছু ব্রেক হলে আমরা poweroff
স্টেটমেন্টটি ব্যবহার করে জোর করে শাটডাউন করতে পারি ।
acpipowerbutton
আপনারও দেখতে হবে তবে অব্যবহৃত। এটি নির্ভরযোগ্য কাজ করে না কারণ এটি। আপনি যদি উইন্ডোজে লগইন হয়ে থাকেন, বা আরও খারাপ একাধিক ব্যবহারকারী, উইন্ডোজ সিস্টেমটিকে শাটডাউন থেকে রোধ করে একটি নিশ্চিতকরণ শাটডাউন ডায়ালগ প্রদর্শন করবে। এটি এই কারণে যে ইন- acpibutton
ইন /etc/default/virtualbox
100% নির্ভরযোগ্য কাজ করবে না। এছাড়াও poweroff
ইচ্ছাশক্তি ভার্চুয়াল মেশিনটি শক্তভাবে শাটডাউন করবে - একটি দীর্ঘ-প্রেস পাওয়ার বোতামের মতো। সুতরাং এটি খালি সেট করা ভাল:
/ ইত্যাদি / ডিফল্ট / ভার্চুয়ালবক্স থেকে অংশ:
# SHUTDOWN_USERS="foo bar"
# check for running VMs of user 'foo' and user 'bar'
# 'all' checks for all active users
# SHUTDOWN=poweroff
# SHUTDOWN=acpibutton
# SHUTDOWN=savestate
# select one of these shutdown methods for running VMs
# acpibutton and savestate causes the init script to wait
# 30 seconds for the VMs to shutdown
SHUTDOWN_USERS=""
SHUTDOWN=""
এটিকে নিখুঁত করতে আপনি পাওয়ার বোতামের আচরণটি পরিবর্তন করতে চাইতে পারেন:
/Etc/acpi/powerbtn.sh এর উদ্ধৃতি:
#!/bin/sh
# /etc/acpi/powerbtn.sh
# Initiates a shutdown when the power putton has been
# pressed.
# @backup
# plain shutdown
/sbin/shutdown -h now "Power button pressed"
# fini
exit 0
...
...
একটি ছোট্ট অপূর্ণতা বাকি আছে। ভার্চুয়াল মেশিনটি এখনও বুট করার সময় এবং অতিথি নিয়ন্ত্রণ পরিষেবাটি চালু না হলে (ভার্চুয়াল মেশিনে) এটি শাটডাউন কমান্ডটি গ্রহণ করবে না। একটি বিরল ঘটনা ... তবে এটি সম্পর্কে চিন্তা করুন।
আশা করি এটি সাহায্য করবে it
reboot
১২.১০- র ম্যান পেজটিতে বলা হয়েছে "যখন - ফোর্স যুক্ত হয় বা যখন রানলেভেল ০ বা in হয়, তখন এই সরঞ্জামটি রিবুট (২) সিস্টেম নিজে কল করে এবং সরাসরি সিস্টেমটিকে রিবুট করে Otherwise অন্যথায় এটি কেবল শাটডাউন (8) সরঞ্জামটির সাথে অনুরোধ করে উপযুক্ত যুক্তি ""; এবং ম্যানshutdown
পেজটির জন্য "একবার টাইম সময় অতিবাহিত হয়ে গেলে, শাটডাউনটি সিস্টেমটিকে উপযুক্ত রানলেলে নামিয়ে আনার জন্য (8) ডিমনকে একটি অনুরোধ প্রেরণ করে।"