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