在 VM 的應用上,有時候需要定期將 VM 環境到特定的狀態,如設定還原、連線數量清零 … 等等的維護。下面為透過 crontab 自動還原 VM 狀態並啟動的做法。
使用軟體:ESXi管理工具 (ex: VMware Host Client, VMware Workstation, … )、SSH Client (ex: putty)
Automatic Reset ESXi VM State (Snapshot)
1. 確保 ESXi 的 SSH 服務已啟用
2. 設定 VM 重啟後自動還原到最後一個快照 snapshots。這裡可以透過 VMware Workstation 設定 VM 選項裡的快照設定,或是透過VMware Host Client 在 VM 編輯設定的組態參數中,直接新增參數:
anapshot.action : autoRevert
3. 使用 putty 等工具連線登入到 ESXi (由於屬於系統的核心設定,建議用 root 身分操作)
4. 登入後透過內建的 vim ,建立關閉指定 VM 的 script 執行檔
(進入vim 後按[A]即可編輯, 按[Esc]退出編輯模式, 按[Shift]+[:]後輸入 wq 即可存檔離開)
vi /power-off.sh
chmod 755 /power-off.sh
vmname=”您的虛擬機器名稱”
vmid=$(vim-cmd vmsvc/getallvms | grep “$vmname” | awk ‘{print$1}’)
stat1=$(vim-cmd vmsvc/power.getstate “$vmid” | grep “on”)
if [ “$stat1” == “Powered on” ]
then
vim-cmd vmsvc/power.off “$vmid”
fi
5 建立啟動指定 VM 的 script 執行檔,並於編輯完成後授予執行的權限
vi /power-on.sh
chmod 755 /power-on.sh
vmname=”您的虛擬機器名稱”
vmid=$(vim-cmd vmsvc/getallvms | grep “$vmname” | awk ‘{print$1}’)
stat1=$(vim-cmd vmsvc/power.getstate “$vmid” | grep “off”)
if [ “$stat1” == “Powered off” ]
then
vim-cmd vmsvc/power.on “$vmid”
fi
6. 編輯 crontab 排程設定檔,以設定定期執行的時間。這裡以每天晚上10點02分執行 power-off.sh 關閉 VM,並每隔16分鐘確保 VM 開啟為例。
vi /var/spool/cron/crontabs/root
2 14 * * * /power-off.sh
*/16 * * * * /power-on.sh
7. 為了讓排程設定生效,需要重啟 crontab 服務。先確認目前 crontab 執行中的 process id,刪除後重新執行即可。
cat /var/run/crond.pid
kill {找到的process id}
crond
8. 上述步驟便能讓目前 ESXi 上的 VM 自動重置狀態並啟動,但由於 ESXi 開機時會重置 crontab 設定,故還需要透過 ESXi 開機執行的 script 檔來自動加上設定。
/bin/kill ${cat /var/run/crond.pid}
/bin/echo ‘2 14 * * * /power-off.sh’ >> /var/spool/cron/crontabs/root
/bin/echo ‘*/16 * * * * /power-on.sh’ >> /var/spool/cron/crontabs/root
crond
以上,便能自動化的讓 VM 虛擬機器定期重置。