脚本文件需要放在/vmfs/volumes目录,即虚拟机的存放目录, 放到其他目录EXSi主机重启后会被清除。
[root@ESXi01:~] cat /schedule_snap.log 2019-03-02 01:00:33 : vmxxxxxx snapshot create success… 2019-03-02 01:01:04 : vmxxxx snapshot create success… 2019-03-02 01:01:36 : vmxxxxx snapshot create success… 2019-03-02 01:02:07 : vmx snapshot create success… 2019-03-02 01:02:39 : vmxx snapshot create success… 2019-03-02 01:03:11 : vmxxxx snapshot create success… 2019-03-02 01:03:42 : vmxxxxxx snapshot create success… 2019-03-02 01:04:14 : vmxxxx snapshot create success…
#!/bin/sh #auto create ESXi snapshots for i in `vim-cmd vmsvc/getallvms | 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
变量的数学计算,在不同的shell版本中可能有不同的写法,注意先测试 此处
DELETE_COUNT= $(($SNAPSHOT_COUNT-$DAY))
而使用中括号[ ]的写法却无法计算
#!/bin/sh DAY=1 #保留数量 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
“5c64e4b5-5ae69e88-dbb3-9cdc71dab878”是存储卷名
##/etc/rc.local.d/local.sh #!/bin/sh kill $(cat /var/run/crond.pid) /bin/echo "0 0 0 ? * 1 * sh /vmfs/volumes/5c64e4b5-5ae69e88-dbb3-9cdc71dab878/crontabs/snapshot_creat.sh" >>/var/spool/cron/crontabs/root /bin/echo "0 0 0 ? * 3 * sh /vmfs/volumes/5c64e4b5-5ae69e88-dbb3-9cdc71dab878/crontabs/snapshot_del.sh" >>/var/spool/cron/crontabs/root crond exit 0
本文作者:Gustav
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!