専用コンピュータにアプライアンスとしてインストールするように設計されたソフトウェアシステムを実行する必要があります。エネルギーを節約するために、VirtualBox VMでシステムを実行する予定です。
ホストはSysV-Initシステムを備えた標準のLinuxシステムで、ゲストは大幅に変更されたLinuxなので、これ以上変更したくありません。 VirtualBoxはOSEバージョンで使用されます。
ホストが起動したときに仮想マシンを起動する方法を見つけました(編集する:以下でNikhilが述べたように、これはVBoxManager startvm
コマンドを介して行われます。しかし、VMを正常にシャットダウンするにはどうすればよいですか?ホスト上で実行されるすべてのスクリプトは、ゲストが完全に終了するのを待つ必要があります。
たとえば、これを行うためのサービスファイルがどのように見えるべきかを提案できる人はいますか?
答え1
acpipowerbutton
このコマンドセットを試しましたか?
VBoxManage controlvm <uuid>|<name>
pause|resume|reset|poweroff|savestate|
acpipowerbutton|acpisleepbutton|
コメントを読んで編集してください。
acpid
あるいは、他のacpiユーティリティを使用してエレガントにすることもできます。また、現在のコンピュータをシャットダウンする方法に関する詳細情報を提供できますか?
プレーンはshutdown
完了していない操作を待たず、時間遅延が長すぎる可能性があります。
私はウィンドウマネージャを使用していないと仮定しているので、これを試してくださいこれツール。
見たばかりこのデーモン。役に立つと思うかもしれません。
答え2
コードを直接書くのではなく、次のことをお勧めします。徒歩旅行者、virtualboxインスタンスをインスタンス化して制御するために構築されました。ドキュメントは非常に優れているので、自分で書くのではなく、自分で確認することをお勧めします。
つまり、簡単な制御ファイルを作成してそれを実行して、vagrant up
必要な数のVirtualBoxインスタンスを起動できます。これを使用してvagrant ssh
ホストにログインし、vagrant halt
ホストをシャットダウンせずにシャットダウンできます。 vagrant destroy
インスタンスを削除します。
Puppet、Ansible、またはChefを使用した構成をサポートし、公開されているVBox構成設定の大部分を制御できます。
答え3
あなたに似たアプリケーションがありますが、1つの違いがあります。システムを再起動し、スナップショットから復元する必要があるということです。
あなたは興味がありますヘッドレスモード。
このようなサービスがあるので、次のスクリプトを使用します。
VBox_StopRestoreStart.sh
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 VMNAME_or_UUID"
exit 1
fi
set -x
VBoxManage controlvm "$1" poweroff #enforce turnoff
VBoxManage snapshot "$1" restorecurrent #retore state
VBoxManage showvminfo "$1" | grep State #display state to ensure
VBoxHeadless -s "$1" #run in headless mode in background
仮想マシンを正常にシャットダウンする方法は?
VMを正常にシャットダウンする場合は、アプリケーションに応じて2つのオプションがあります。
- 「終了ボタン」シミュレーションまたは、「スリープ」ボタンを押して、仮想マシンがそれに反応するように準備します(通常は終了)。
VBoxManage controlvm <uuid>|<VMname> acpipowerbutton
VBoxManage controlvm <uuid>|<VMname> acpisleepbutton
- 後で復元できるように仮想マシンの状態を保存する
VBoxManage controlvm <uuid>|<VMname> savestate
ヒント:以下が役に立ちます。
VBoxManage list vms
- 利用可能な仮想マシンのリストrdesktop IP-ADDR:3389
またはrdesktop-vrdp IP-ADDR:3389
- GUIが必要な場合(またはさらに離れて)ヘッドレスモードで実行する場合:VBoxHeadless -s <uuid>|<VMname>
VBoxManage startvm
- ローカルデバッグ用にGUIで実行
VirtualBoxマニュアルの関連セクション:第7章リモート仮想マシン - ステップバイステップ:ヘッドレスサーバーに仮想マシンを作成する
PS実装されたフル機能のソリューションに興味がある場合は、オープンスタック興味深い選択のようです。
答え4
systemdベースのシステムでは、これを試すことができます。
ステップ1:サービスファイルを作成する
[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service
[Service]
User=user
Group=vboxusers
ExecStart=/usr/bin/VBoxHeadless -s %i
ExecStop=/usr/bin/VBoxManage controlvm %i savestate
[Install]
WantedBy=multi-user.target
ステップ2:サービスファイルを有効にする
$ sudo systemctl enable vboxvmservice@vm_name.service