VMwareゲストOSのサスペンド・レジューム時にスクリプトを自動実行する方法【vmware-tools設定ガイド】

2012年1月27日


VMware PlayerでUbuntuなどのゲストOSを動かしていると、サスペンドからの復帰(レジューム)後に特定のサービスが止まってしまうことがある。

たとえば、ホストOSのフォルダを共有マウント(/mnt/hgfs/)してApacheのドキュメントルートに使っている場合、レジューム後にApacheが正常に動かなくなり、手動で再起動が必要になる。毎回これをやるのは手間がかかる。

この記事では、VMware Toolsが提供する仕組みを使って、サスペンド・レジューム・電源ON/OFFなどのタイミングで任意のスクリプトを自動実行する方法を解説する。

VMwareのゲストOSでサスペンド・レジュームのフローとスクリプト実行タイミングを示す図


この記事で解決できること

  • ✅ VMwareゲストOSのレジューム時に任意のスクリプトを自動実行する設定
  • /etc/vmware-tools/scripts/ 配下のディレクトリ構造の理解
  • ✅ 電源ON・OFF・サスペンド・レジュームそれぞれのトリガーに対応したスクリプト配置

動作確認環境: Ubuntu 20.04 / VMware Workstation Player 17 / VMware Tools(open-vm-tools 12.x)


問題の背景

VMware Playerでゲス��OS(例:Ubuntu)を使い、以下のような環境を構築しているとする。

  • ホストOSのフォルダを /mnt/hgfs/プロジェクト名/ で共有
  • Apacheのドキュメントルートを /mnt/hgfs/プロジェクト名/public/ に設定

この場合、ゲストOSをサスペンドして後で再起動(レジューム)すると、共有フォルダのマウントが一時的に不安定になり、Apacheが正常に起動できないことがある。

毎回ターミナルを開いて sudo systemctl restart apache2 を実行するのは非効率だ。

この問題を解決するのが、VMware Toolsが用意しているイベントフック用スクリプトディレクトリの仕組みだ。


VMware Toolsのスクリプトディレクトリ構造

VMware Toolsがインストールされているゲ��トOS(Linux)では、/etc/vmware-tools/scripts/ 以下に専用のディレクトリが存在する。

ls /etc/vmware-tools/scripts/
# vmware/

デフォルトでは vmware/ ディレクトリのみ存在する。中身を確認すると:

ls /etc/vmware-tools/scripts/vmware/
# network

network というスクリプトがあり、これはレジューム時にネットワークを再接続するためのスクリプトだ。VMware Toolsが標準で提供しているものなので、触る必要はない。

/etc/vmware-tools/scripts/ディレクトリ構造を示すツリー図


使えるイベントトリガー一覧

VMware Toolsは以下の4つのイベントに対応したスクリプトディレクトリをサポートしている。これらのディレクトリはデフォルトでは作成されていないため、必要なものを自分で作成する。

ディレクトリ名 実行タイミング
poweron-vm-default.d 電源ONでゲストOSが起動したとき
resume-vm-default.d サスペンドから復帰(レジューム)したとき
poweroff-vm-default.d 電源OFFでゲストOSがシャットダウンするとき
suspend-vm-default.d サスペンドしてゲストOSが一時停止するとき

これらのディレクトリに実行可能なスクリプトを配置すると、対応するタイミングで自動的に実行される。


解決策:レジューム時にApacheを再起動する

手順1: ディレクトリを作成する

sudo mkdir -p /etc/vmware-tools/scripts/resume-vm-default.d

手順2: スクリプトを作成する

sudo nano /etc/vmware-tools/scripts/resume-vm-default.d/restart-apache.sh

以下の内容を記述する:

#!/bin/bash
# レジューム時にApacheを再起動する

# ログファイルに記録
echo "$(date): Apache restart triggered by VMware resume" >> /var/log/vmware-resume.log

# Apacheを再起動
systemctl restart apache2

echo "$(date): Apache restart completed" >> /var/log/vmware-resume.log

手順3: 実行権限を付与する

スクリプトに実行権限がないと実行されないため、必ず付与する。

sudo chmod +x /etc/vmware-tools/scripts/resume-vm-default.d/restart-apache.sh

手順4: 動作確認

スクリプトを直接実行して、エラーが出ないことを確認する。

sudo /etc/vmware-tools/scripts/resume-vm-default.d/restart-apache.sh
# ログを確認
cat /var/log/vmware-resume.log

その後、実際にゲストOSをサスペンドして復帰させ、Apacheが自動的に再起動されることを確認する。

ターミナルでスクリプトの動作確認をしている様子(ログ出力のスクリーンショット)


サスペンド前にサービスを停止する例

レジュームのほかに、サスペンド前に何かを実行したい場合は suspend-vm-default.d を使う。たとえば、MySQLのデータを確実にフラッシュしてからサスペンドしたい場合:

sudo mkdir -p /etc/vmware-tools/scripts/suspend-vm-default.d
sudo nano /etc/vmware-tools/scripts/suspend-vm-default.d/flush-mysql.sh
#!/bin/bash
# サスペンド前にMySQLのデータを安全にフラッシュ

echo "$(date): Flushing MySQL before suspend" >> /var/log/vmware-suspend.log
# MySQLの認証方式に合わせて適切な接続方法を選択する
# 例: --defaults-file でオプションファイルを指定する方法
mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs 2>/dev/null || true
echo "$(date): MySQL flush completed" >> /var/log/vmware-suspend.log
sudo chmod +x /etc/vmware-tools/scripts/suspend-vm-default.d/flush-mysql.sh

open-vm-tools を使っている場合の注意点

最近のUbuntuでは、VMware純正のVMware ToolsではなくOSSの open-vm-tools が使われているケースが多い。open-vm-tools でも同じパスが使用されるため、設定方法は基本的に同じだ。

インストール状況を確認するには:

# VMware Toolsの確認
vmware-toolsd --version

# open-vm-toolsのバージョン確認
dpkg -l open-vm-tools

open-vm-tools がインストールされていない場合はインストールする:

sudo apt update
sudo apt install open-vm-tools

なお、/etc/vmware-tools/scripts/ ディレクトリが存在しない場合は、手動で作成してもスクリプトは実行されない。VMware Toolsまたはopen-vm-toolsが正常にインストール・稼働していることが前提だ。


よくある問題と対処法

スクリプトが実行されない

確認すべきこと:

  1. 実行権限が付与されているか
ls -la /etc/vmware-tools/scripts/resume-vm-default.d/
# -rwxr-xr-x になっていること
  1. VMware Toolsが動いているか
systemctl status vmware-tools
# または
systemctl status open-vm-tools
  1. スクリプトに構文エラーがないか
bash -n /etc/vmware-tools/scripts/resume-vm-default.d/restart-apache.sh

ログファイルに何も書かれない

スクリプト自体は実行されているが、ログディレクトリのパーミッションの問題でログが書き込まれないことがある。

# ログファイルを事前に作成してパーミッションを設定
sudo touch /var/log/vmware-resume.log
sudo chmod 644 /var/log/vmware-resume.log

まとめ

VMwareゲストOSのサスペンド・レジューム時のスクリプト自動実行について解説した。

  • 仕組み: /etc/vmware-tools/scripts/ 配下に用途別ディレクトリを作成してスクリプトを配置
  • 対応イベント: 電源ON(poweron-vm-default.d)・レジューム(resume-vm-default.d)・電源OFF(poweroff-vm-default.d)・サスペンド(suspend-vm-default.d)の4種類
  • 必須設定: スクリプトファイルへの実行権限(chmod +x)の付与

VMware Playerでの開発環境構築では、共有フォルダとサービスの再起動がセットになることが多い。この仕組みを活用することで、レジューム後の手動作業をゼロにできる。


関連記事

VMWare

Posted by GENDOSU