唔該上面巴打去咗問,已置頂
MacBook的話我一路都講,換電要千尾二千頭,如果續保可以令你<80%偷到換一次就值返晒,當打包其他維修保險咁樣套路
#!/bin/zsh
VMPATH="/path/to/your/vm.vmwarevm"
SSHKEY="/path/to/your/key.pem"
SSHUSER="user@0.0.0.0"
AGENTNAME="com.keepvmalive"
PLISTPATH="/Users/user/Library/LaunchAgents/$AGENTNAME.plist"
export PATH="$PATH:/Applications/VMware Fusion.app/Contents/Public"
SELF=$0
OK=0
CANCEL=1
ESC=255
Menu(){
while :
do {
printf '\033[8;25;80t'
SELECTION=$(dialog --title "VM Manage Tool" --clear \
--cancel-label "Exit" \
--menu "$(CheckVM text)\n$(CheckLaunchAgent text)" 16 65 5\
1 "Refresh" \
2 "SSH" \
3 "Start" \
4 "Soft shutdown" \
5 "Hard shutdown" \
6 "Enable alive checker" \
7 "Disable alive checker" \
2>&1 > /dev/tty)
RESULT=$?
if [ $RESULT -eq $OK ]; then
Select $SELECTION
elif [ $RESULT -eq $CANCEL ] || [ $RESULT -eq $ESC ]; then
exit
fi
} done
}
Select(){
CHOICE=$1
case $CHOICE in
1) Menu
;;
2) printf '\033[8;50;160t'
clear
ssh -i $SSHKEY $SSHUSER
;;
3) vmrun start "$VMPATH" nogui
;;
4) vmrun stop "$VMPATH" soft
;;
5) vmrun stop "$VMPATH" hard
;;
6) CreateLaunchAgent
;;
7) RemoveLaunchAgent
;;
esac
echo "Finished..."
read -s
}
CheckIn(){
if [[ $(CheckVM) == 0 ]]; then
vmrun start "$VMPATH" nogui
fi
sleep 10
exit
}
CheckVM(){
if [[ $(vmrun list) == *"$VMPATH"* ]]; then
[[ $1 == "text" ]] && echo "VM is running." || echo 1
else
[[ $1 == "text" ]] && echo "VM is NOT running." || echo 0
fi
}
CheckLaunchAgent(){
if [[ $(launchctl list) == *"$AGENTNAME"* ]]; then
[[ $1 == "text" ]] && echo "Alive checker exists. [$(launchctl list | grep $AGENTNAME)]" || echo 1
else
[[ $1 == "text" ]] && echo "Alive checker not found." || echo 0
fi
}
CreateLaunchAgent(){
cat > $PLISTPATH <<- EOM
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>$AGENTNAME.plist</string>
<key>ProgramArguments</key>
<array>
<string>$SELF</string>
<string>checkin</string>
</array>
<key>StandardErrorPath</key>
<string>/tmp/$AGENTNAME-plist.err</string>
<key>StandardOutPath</key>
<string>/tmp/$AGENTNAME-plist.out</string>
<key>StartInterval</key>
<integer>300</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOM
launchctl load -w $PLISTPATH
launchctl start $AGENTNAME
}
RemoveLaunchAgent(){
launchctl unload -w $PLISTPATH
launchctl remove -w $PLISTPATH
rm -f $PLISTPATH
}
[[ $1 == "checkin" ]] && CheckIn || Menu