golang实现windows服务器上文件夹的定时备份

golang实现windows服务器上文件夹的定时备份

需求:windows服务器上的软件程序文件夹,希望能够每天定时备份到另一台服务器上。

实现思路:利用windows文件共享服务建立两台服务器之间的链接,使用windows自带的xcopy命令完成文件夹的拷贝,使用golang完成定时任务,定时执行xcopy命令。

golang完整代码:

package main

import (
	"fmt"
	"os"
	"os/exec"
	"time"

	"github.com/go-ini/ini"
	"github.com/robfig/cron"
)

func main() {
	fmt.Println("每天凌晨3点自动备份,不要关!")
	c := cron.New(cron.WithSeconds())
	spec := "00 00 03 * * ?"
	c.AddFunc(spec, func() {
		inixcopy()
	})

	c.Start()
	select {} //阻塞主线程停止
}

func inixcopy() {
	cfg, err := ini.Load("my.ini")
	if err != nil {
		fmt.Printf("Fail to read file: %v", err)
		os.Exit(1)
	}
	spath := cfg.Section("").Key("spath").String()

	dpath := cfg.Section("").Key("dpath").String()

	a := time.Now().Format("20060102")
	os.Chdir(dpath)
	os.Mkdir("./"+a, os.ModePerm)
	c := exec.Command("cmd", "/C", "xcopy", spath, "./"+a+"\\", "/e", "/y")
	if err := c.Run(); err != nil {
		fmt.Println("Error: ", err)
	}
}

my.ini配置文件:

#配置需要备份的目录
spath = e:\\Romens
#配置存放备份的目录
dpath = z:\\167应用程序日备份\\

#使用说明
#在存放备份的远程服务器上建立共享文件夹
#在需要备份的服务器控制面板-凭据管理添加远程服务器的IP、用户名、密码
#在需要备份的服务器上添加网络驱动器,比如映射盘符为z盘
#修改my.ini中的源目录spath与目标目录dpath
#在需要备份的服务器上运行,凌晨3点执行备份

软件使用方法:

1、在存放备份的远程服务器上建立共享文件夹,如sharebak,并完成共享设置

golang实现windows服务器上文件夹的定时备份

2、在需要备份的服务器控制面板-凭据管理添加远程服务器的IP、用户名、密码

golang实现windows服务器上文件夹的定时备份

golang实现windows服务器上文件夹的定时备份

3、在需要备份的服务器上添加网络驱动器,比如映射盘符为x盘

golang实现windows服务器上文件夹的定时备份

golang实现windows服务器上文件夹的定时备份

4、将编译完成的exe与my.ini文件放到需要备份文件夹的服务器上,并完成my.ini配置文件中spath与dpath的修改(根据自己实际情况做对应修改),双击exe运行程序,程序打开后不要关闭这个窗口

golang实现windows服务器上文件夹的定时备份

5、每天凌晨3点在远程服务器共享文件上,软件会自动按日期新建文件夹,并将需要备份的文件夹copy过来

golang实现windows服务器上文件夹的定时备份

golang实现windows服务器上文件夹的定时备份相关教程