解决VMware Fusion开机自动时提示“未找到文件”或虚拟机繁忙的问题。

解决方案

使用crontab配合sh脚本即可。

crontab中加入计划任务

@reboot /Users/i/tools/autoruns.sh

autoruns.sh

#!/bin/bash

# 等待 1 分钟后开始执行
sleep 60

# 设置参数
MAX_WAIT=600
WAIT_INTERVAL=5
ELAPSED=0

VMWARE_PATH="/Volumes/sn850x/VMware/"
VMWARE_PROCESS="vmware-vmx"
VMWARE_APP="/Applications/VMware Fusion.app"
VMWARE_RUN="/Applications/VMware Fusion.app/Contents/Public/vmrun"
LOG_FILE="/Users/i/tools/autoruns.log"


echo "$(date): 脚本启动" >> "$LOG_FILE"

# 等待目录可访问
while [ ! -d "$VMWARE_PATH" ]; do
    if [ "$ELAPSED" -ge "$MAX_WAIT" ]; then
        echo "$(date): 超时,目录仍不可访问,退出脚本。" >> "$LOG_FILE"
        exit 1
    fi
    echo "$(date): 目录不可访问,等待 $WAIT_INTERVAL 秒后重试..." >> "$LOG_FILE"
    sleep $WAIT_INTERVAL
    ELAPSED=$((ELAPSED + WAIT_INTERVAL))
done
echo "$(date): 目录已可访问,检查 vmware-vmx 进程..." >> "$LOG_FILE"

# 检查 vmware-vmx 是否在运行
if pgrep "$VMWARE_PROCESS" > /dev/null; then
    echo "$(date): vmware-vmx 已在运行,退出脚本。" >> "$LOG_FILE"
    exit 0
else
    echo "$(date): vmware-vmx 未运行,启动 VMware Fusion..." >> "$LOG_FILE"
    open -g "$VMWARE_APP"
    sleep 10
    rm -rf /Volumes/sn850x/VMware/openwrt/openwrt.vmwarevm/*.lck
    rm -rf /Volumes/sn850x/VMware/Windows11/Windows\ 11\ 64\ 位\ ARM.vmwarevm/*.lck
    rm -rf /Volumes/sn850x/VMware/Windows11_2/Windows11_2.vmwarevm/*.lck
    echo "$(date): run openwrt" >> "$LOG_FILE"
    "$VMWARE_RUN" -T fusion start /Volumes/sn850x/VMware/openwrt/openwrt.vmwarevm/openwrt.vmx >>"$LOG_FILE" 2>&1
    sleep 30
    echo "$(date): run windows11_1" >> "$LOG_FILE"
    "$VMWARE_RUN" -T fusion start /Volumes/sn850x/VMware/Windows11/Windows\ 11\ 64\ 位\ ARM.vmwarevm/Windows\ 11\ 64\ 位\ ARM.vmx >>"$LOG_FILE" 2>&1
    sleep 30
    echo "$(date): run windows11_2" >> "$LOG_FILE"
    "$VMWARE_RUN" -T fusion start /Volumes/sn850x/VMware/Windows11_2/Windows11_2.vmwarevm/Windows\ 11\ 64\ 位\ ARM.vmx >>"$LOG_FILE" 2>&1
    echo "$(date): 应用已启动,退出脚本。" >> "$LOG_FILE"
    exit 0
fi

注:

  1. 配置完成后建议重启验证一次,以确保已正常授予crontab磁盘访问权限;Mac设置“登录项与扩展”的“登录时打开”不必再包含VMware Fusion.app
  2. 确保vmrun已在环境变量,即Terminal可以正常执行vmrun命令。
  3. 路径请自行替换。
  4. vmrun不使用选项-nogui的原因是,使用-nogui后,VMware Fusion的图形化可能无法正常控制虚拟机状态(mac重启时也不会询问虚拟机状态,如果纯后台运行,可以考虑加上该选项)。
  5. 赋予autoruns.sh执行权限。

已知问题

macos升级重启后,可能无法无法正常启动相关虚拟机。