আমি একটি পাইথন স্ক্রিপ্ট তৈরি করেছি যা চলমান সমস্ত ভার্চুয়ালবক্স ভিএম স্থগিত করবে এবং তারপরে একটি নির্ধারিত টাস্ক হিসাবে লগআউটে স্ক্রিপ্টটি চালানোর জন্য সিস্টেমটি সেট আপ করবে।
এই পদ্ধতিটি ঠিক কতটা নির্ভরযোগ্য তা আমি জানি না। অন্যরা যেমন বলেছে যে উইনলগন 7002 টাস্কটি শেষ হওয়ার জন্য সিস্টেম কতক্ষণ অপেক্ষা করবে তার সীমা রয়েছে। তবে সামগ্রিকভাবে ভিএম র্যামের 4+ গিগাবাইট জুড়ে একাধিক চলমান ভিএম ব্যবহার করেও ব্যক্তিগতভাবে এটি ব্যবহারযোগ্য সেভ স্টেটগুলি দেওয়ার ক্ষেত্রে আমার ব্যক্তিগত কোনও সমস্যা হয়নি।
এটি সেট আপ করার পদক্ষেপ এখানে:
- পাইথন.আর.জি. থেকে পাইথন ২.7.x ডাউনলোড এবং ইনস্টল করুন
- নোটপ্যাড বা অন্য কোনও সাধারণ পাঠ্য সম্পাদক ব্যবহার করে আপনার সিস্টেমে পাইথন স্ক্রিপ্ট ফাইলটি তৈরি করুন (নীচে দেখুন)
- টাস্ক শিডিয়ুলার খুলুন
- অ্যাকশন চয়ন করুন -> একটি বেসিক টাস্ক তৈরি করুন ... এবং নীচের সেটিংসের সাহায্যে কোনও কার্য তৈরি করতে উইজার্ডটি ব্যবহার করুন
- আপনার পছন্দের একটি নাম
- একটি নির্দিষ্ট ইভেন্ট লগ করা হলে কাজটি শুরু করুন
- লগ: সিস্টেম
- সূত্র: উইনলগন
- ইভেন্ট আইডি: 7002
- একটি প্রোগ্রাম শুরু করুন
- পরবর্তী প্রোগ্রাম / স্ক্রিপ্ট , আপনার সম্পূর্ণ পাথ লিখুন
python.exe
উদাহরণস্বরূপ,c:\Python27\python.exe
- পরবর্তী আর্গুমেন্ট যোগ করুন উদাহরণস্বরূপ, সম্পূর্ণ পাথ যেখানে আপনি পাইথন স্ক্রিপ্ট ফাইল করা লিখুন, আমি আমার নথি ফোল্ডারটির একটি subfolder খনি করা তাই এই হল
C:\Users\rakslice\Documents\vboxsuspend\vboxsuspend.py
- সমাপ্তি নির্বাচন করুন।
এখন ভার্চুয়ালবক্স ভিএমগুলি লগআউট / পুনঃসূচনা / শাটডাউনে স্থগিত করা উচিত।
শাটডাউনটি করার জন্য অজগর স্ক্রিপ্টটি নীচে রয়েছে:
# A script to suspend all running VirtualBox VMs
import os
import subprocess
import sys
class VM(object):
def __init__(self, name, uuid):
self.name = name
self.uuid = uuid
def __repr__(self):
return "VM(%r,%r)" % (self.name, self.uuid)
class VBoxRunner(object):
def __init__(self):
program_files = os.environ["ProgramW6432"]
vbox_dir = os.path.join(program_files, "Oracle", "VirtualBox")
self.vboxmanage_filename = os.path.join(vbox_dir, "VBoxManage.exe")
def vbox_run(self, *args):
subprocess.check_call([self.vboxmanage_filename] + list(args))
def vbox_run_output(self, *args):
return subprocess.check_output([self.vboxmanage_filename] + list(args))
def list(self, running=True):
if running:
list_cmd = "runningvms"
else:
list_cmd = "vms"
return [self.parse_vm_list_entry(x) for x in self.vbox_run_output("list", list_cmd).strip().split("\n")]
def suspend_all(self):
success = True
stopped_some_vms = False
vms = self.list(running=True)
for vm in vms:
if vm is None:
continue
# noinspection PyBroadException
try:
self.suspend_vm(vm)
except:
success = False
else:
stopped_some_vms = True
if not stopped_some_vms:
self.message("No running vms")
return success
@staticmethod
def parse_vm_list_entry(x):
""":type x: str"""
if not x.startswith('"'):
return None
end_pos = x.find('"', 1)
if end_pos == -1:
return None
name = x[1:end_pos]
assert x[end_pos + 1: end_pos + 3] == " {"
assert x.endswith("}")
uuid = x[end_pos + 2:]
return VM(name, uuid)
@staticmethod
def message(msg):
print >>sys.stderr, msg
def suspend_vm(self, vm):
assert isinstance(vm, VM)
self.vbox_run("controlvm", vm.uuid, "savestate")
def main():
vr = VBoxRunner()
success = vr.suspend_all()
if not success:
sys.exit(1)
if __name__ == "__main__":
main()