Saya perlu menjalankan sistem perangkat lunak yang dimaksudkan untuk diinstal sebagai alat pada mesin khusus. Untuk menghemat energi, saya berencana menjalankan sistem pada VM VirtualBox sebagai gantinya.
Tuan rumah adalah kotak Linux standar dengan sistem SysV-Init, tamu adalah Linux yang banyak dimodifikasi dan saya lebih suka tidak perlu mengubahnya lebih lanjut. VirtualBox digunakan dalam versi OSE.
Saya sudah menemukan cara memulai VM ketika host melakukan boot ( Edit: ini dilakukan, seperti yang disebutkan Nikhil di bawah, melalui perintah VBoxManager startvm
), tetapi bagaimana saya bisa dengan anggun mematikan VM? Setiap skrip yang berjalan pada host harus menunggu sampai tamu benar-benar mati.
Adakah yang bisa menyarankan bagaimana, misalnya, file layanan yang melakukan ini harus terlihat?
sumber
Jawaban:
Sudahkah Anda mencoba
acpipowerbutton
dari rangkaian perintah ini?Edit setelah membaca komentar:
Anda dapat menggunakan
acpid
atau utilitas lain untuk membuatnya anggun. Juga, dapatkah Anda memberikan informasi lebih lanjut tentang bagaimana Anda mematikan mesin saat ini?Plain
shutdown
tidak akan menunggu pekerjaan yang belum selesai, penundaan waktu mungkin terlalu lama.Saya berasumsi Anda tidak menggunakan window manager jadi coba alat ini .
Baru saja melihat daemon ini . Anda mungkin menemukan itu berguna.
sumber
vboxmanage list runningvms
sampai VM Anda hilang.Daripada mengkodekannya sendiri, pertimbangkan untuk menggunakan Vagrant , yang dibuat untuk instantiate dan mengontrol instance virtualbox. Dokumentasinya sangat bagus dan saya sarankan Anda memeriksanya daripada mencoba untuk membuat sendiri.
Panjang dan pendeknya adalah Anda membuat file kontrol sederhana dan kemudian jalankan
vagrant up
untuk memulai instance VirtualBox sebanyak yang Anda inginkan. Anda dapat menggunakanvagrant ssh
untuk masuk ke host danvagrant halt
mematikan host (tanpa mengakhiri).vagrant destroy
akan menyingkirkan instance.Ini mendukung penyediaan dengan boneka, Ansible atau Chef dan memungkinkan Anda untuk mengontrol sebagian besar pengaturan konfigurasi VBox yang terbuka.
sumber
Saya memiliki aplikasi yang sama dengan Anda, dengan satu perbedaan: Saya perlu me-restart sistem dan memulihkan dari snapshot.
Yang Anda minati adalah mode tanpa kepala .
Saya memiliki beberapa layanan seperti itu sehingga saya menggunakan skrip berikut:
VBox_StopRestoreStart.sh
JIKA Anda ingin mematikan VM dengan anggun, Anda memiliki dua opsi, tergantung pada aplikasi Anda:
VBoxManage controlvm <uuid>|<VMname> acpipowerbutton
VBoxManage controlvm <uuid>|<VMname> acpisleepbutton
VBoxManage controlvm <uuid>|<VMname> savestate
TIPS: Anda mungkin menemukan berguna:
VBoxManage list vms
- daftar vms yang tersediardesktop IP-ADDR:3389
ataurdesktop-vrdp IP-ADDR:3389
- ketika Anda ingin GUI (bahkan dari jarak jauh ) saat Anda menjalankan dalam mode tanpa kepala:VBoxHeadless -s <uuid>|<VMname>
VBoxManage startvm
- mulai dengan GUI untuk debugging lokalBab VirtualBox manual terkait: Bab 7. Mesin virtual jarak jauh - Langkah demi langkah: membuat mesin virtual di server tanpa kepala
PS Jika Anda tertarik pada solusi berfitur lengkap yang sudah diterapkan, OpenStack tampaknya pilihan yang menarik.
sumber
Melihat dokumentasi manajemen VM VirtualBox di http://www.virtualbox.org/manual/ch08.html
Untuk mendaftarkan VM, gunakan perintah
VBoxManage list vms
Untuk memulai VM, gunakan perintah
VBoxManage startvm
http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm
Untuk mengendalikan VM, gunakan
VBoxManage controlvm
controlvm
Sub - perintah memungkinkan Anda untuk mengubah status mesin virtual yang sedang berjalan. Berikut ini dapat ditentukan:VBoxManage controlvm <vm> pause
sementara menunda mesin virtual, tanpa mengubah statusnya untuk selamanya. Jendela VM akan dicat abu-abu untuk menunjukkan bahwa VM saat ini dijeda. (Ini sama dengan memilih item "Jeda" di menu "Mesin" GUI.)Gunakan
VBoxManage controlvm <vm> resume
untuk membatalkan perintah jeda sebelumnya. (Ini sama dengan memilih item "Lanjutkan" di menu "Mesin" GUI.)VBoxManage controlvm <vm> reset
memiliki efek yang sama pada mesin virtual dengan menekan tombol "Reset" pada komputer nyata: reboot dingin dari mesin virtual, yang akan memulai kembali dan boot sistem operasi tamu segera. Keadaan VM tidak disimpan sebelumnya, dan data mungkin hilang. (Ini sama dengan memilih item "Reset" di menu "Mesin" GUI.)VBoxManage controlvm <vm> poweroff
memiliki efek yang sama pada mesin virtual seperti menarik kabel daya pada komputer sungguhan. Sekali lagi, keadaan VM tidak disimpan sebelumnya, dan data mungkin hilang. (Ini sama dengan memilih item "Tutup" di menu "Mesin" pada GUI atau menekan tombol tutup jendela, dan kemudian memilih "Matikan mesin" dalam dialog.)Setelah ini, status VM akan "dimatikan".
sumber
vboxmanage
(semua huruf kecil).VBoxManage controlvm
sub- perintah yang melakukan itu./etc/init.d/vboxvms-service
skrip pada sistem host, yang setelah mulai akan membuat semua vms hidup dan berhenti, akan membuat semua vms turun.VBoxManage controlvm savestate
adalah kemungkinan lain (setidaknya google memberitahu saya), ini menyimpan status mesin dan mematikannya dengan bersih, tetapi masih tidak ada cara untuk memaksa tuan rumah menunggu.Untuk sistem berbasis systemd, Anda bisa mencoba ini.
Langkah # 1: buat file layanan
Langkah # 2: Aktifkan file layanan
Referensi
sumber
VBoxHeadless -s %i
untuk memulai danVBoxManage controlvm %i savestate
menghentikan VM.Bagaimana kalau mengirim perintah melalui ssh dari host ke tamu?
Saya tidak yakin apakah itu berfungsi dan apakah Anda dapat memeriksa status mesin setelahnya atau mendapatkan sesuatu seperti status keluar, tetapi harus turun setidaknya bersih.
sumber
Solusi saya: Dalam shellscript ini 'root' adalah invoker, dan 'theuser' adalah pemilik 'thevm'
Saya tahu vms telah berakhir ketika output dari perintah
VBoxManage list runningvms
mengembalikan sebuah string kosong.sumber
Untuk memulai vm:
Untuk menghentikan vm:
Daftar semua vm yang berjalan:
sumber
Mungkin ini akan membantu sebagai bagian dari solusi.
sumber
Mengapa Anda tidak login ke tamu Anda dan mematikannya dari sana?
Kecuali Anda memiliki alasan kuat untuk tidak menginstal sshd dan mengakses VM melalui VBox, saya akan menggunakan skrip yang hanya mengeluarkan sebuah
ssh shutdown -h now
. Sejujurnya, saya akan membuat skrip untuk setiap mesin yang benar-benar mematikannya dan melakukan beberapa pemeriksaan saat melakukannya.Cukup kemas skrip /etc/init.d/shutdown_vm yang memanggil yang lain dari host, panggilan akan diblokir hingga siap. Proses ini (seperti dijelaskan) menambahkan ketergantungan linux pada tamu tetapi menghilangkan ketergantungan VBox di tuan rumah.
Memotong untuk mengejar: Anda tidak perlu mengakses VBox untuk mematikan mesin, jika Anda memiliki beberapa cara mengaksesnya (yaitu ssh) maka OS akan selalu memiliki beberapa cara untuk itu (menyalakannya, tentu saja berbeda)
sumber