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,并完成共享设置

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


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


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

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