esxi 自动给虚拟机打快照(定时快照任务)
esxi重启之后会清除 /vmfs/volumes 目录以外的文件,故需将脚本放在 /vmfs/volumes/datastore1 目录中
1.添加新增快照和删除快照的命令
cd /vmfs/volumes/datastore1 #进入esxi存储目录datastore1目录各自不同,请修改为你的存储地址
mkdir crontabs #建立crontabs文件夹
cd crontabs #进入刚刚建立的crontabs文件夹
touch snapshot_creat.sh #创建snapshot_creat.sh文件(创建快照时调用的文件)
vi snapshot_creat.sh #编辑snapshot_creat.sh文件
输入i进入文本编辑状态
内容如下:
#!/bin/sh
# 我这边单独指定了虚拟机[51,54,56,57,58,59,60,65]做快照,使用vim-cmd vmsvc/getallvms指令查询所有虚拟机编号
#auto create ESXi snapshots
for i in `vim-cmd vmsvc/getallvms |grep [51,54,56,57,58,59,60,65]| grep -v nosnap | awk '{print $1}' | grep -e "[0-9]"`
do
vname=$(vim-cmd vmsvc/get.summary $i | grep name | awk '{ print $3 }' | cut -d \" -f 2)
vim-cmd vmsvc/snapshot.create $i $(date "+%F")
sleep 30s
if [ $? -eq 0 ];then
echo "$(date "+%F %T") : $vname snapshot create success.." >> ./schedule_snap.log
else
echo "$(date "+%F %T") : $vname snapshot create FAILED.." >> ./schedule_snap.log
fi
done #
按ESC退出编辑状态
输入:wq保存并退出
touch snapshot_del.sh #创建snapshot_del.sh文件(清理快照时调用的文件)
vi snapshot_del.sh #编辑snapshot_del.sh文件
输入i进入文本编辑状态
内容如下:
#!/bin/sh
DAY=3 #保留快照的数量
for i in `vim-cmd vmsvc/getallvms | awk '{print $1}' | grep -e "[0-9]"`
do
SNAPSHOT_COUNT=`vim-cmd vmsvc/snapshot.get $i | egrep -- '--\|-CHILD|^\|-ROOT' | wc -l`
if [ $SNAPSHOT_COUNT -gt $DAY ]; then
DELETE_COUNT=$(($SNAPSHOT_COUNT-$DAY))
OLD_SNAPSHOT_ID=`vim-cmd vmsvc/snapshot.get $i | grep Id | head -$DELETE_COUNT | awk -F: '{print $2}'`
for n in $OLD_SNAPSHOT_ID
do
vim-cmd vmsvc/snapshot.remove $i $n > /dev/null
sleep 30s
done
fi
done
按ESC退出编辑状态
输入:wq保存并退出
2、添加crond任务
vi /etc/rc.local.d/local.sh
输入i进入文本编辑状态
内容如下:
kill $(cat /var/run/crond.pid)
/bin/echo "0 1 * * 2,4 sh /vmfs/volumes/你的存储文件夹/crontabs/snapshot_creat.sh" >> /var/spool/cron/crontabs/root
/bin/echo "30 2 * * 2,4 sh /vmfs/volumes/你的存储文件夹/crontabs/snapshot_del.sh" >> /var/spool/cron/crontabs/root
crond
按ESC退出编辑状态
输入:wq保存并退出
输入:
kill $(cat /var/run/crond.pid) #结束自动任务进程(非必要,重启即可实现)
crond #重启自动任务进程(非必要,重启即可实现)
reboot #重启ESXI,注意,一定要正常关闭所有虚拟机再重启
说明:
0 1 * * 2,4 # 定时任务分别对应 **分 时 日 月 星期** 即为,每周二周四的一点执行任务
30 2 * * 2,4 # 定时任务分别对应 **分 时 日 月 星期** 即为,每周二周四的两点半执行任务
00 1 * * 6 # 定时任务分别对应 **分 时 日 月 星期** 即为,每周六的一点执行任务
**/sbin/auto-backup.sh** 保存local.sh的修改设置,使其**永久生效**
设置完成重启ESXI生效