1.windows下对比两个文件内容,有差异则执行一个任务:
适用场景:比如你的数据库备份结果的日志每天会形成一个文件,如下图,你可以通过此脚本检测到文件的变化,并执行发送告警邮件通知你数据库备份异常。
对比两个文件.bat
rem 检查Linux服务器上的异地备份情况并报警:yes.log为正常情况下的日志,如果新的日志和正常不符则报警。
rem 设置取当前的时间,格式:2018-02-06 set now=%Date:~0,4%-%Date:~5,2%-%Date:~8,2%
rem 当天的日志结果和标准日志对比,如一样则ok,如不同则触发邮件脚本“sendmillog.vbs”
fc /b %now%.log yes.log &&echo ok|| call sendmaillog.vbs
sendmaillog.vbs

'vbs发邮件 By 依梦琴瑶 '设置发信人邮箱地址 Sender = "xxxx.qq.com" '设置发信人邮箱密码 Sender_PassWord = "xxxx" '设置发信人邮箱SMTP服务器地址 Smtp = "smtp.xxx.net" '设置SMTP服务器端口 Port = 25 '设置收信人邮箱地址 Receiver = "xxxx@qq.com" '设置附件文件路径。 'Attachment = "" '设置邮件主题 Subject = "数据备份异常" '设置正文文本路径。 Text = "数据备份异常,请查看日志." NameSpace = "http://schemas.microsoft.com/cdo/configuration/" Set Email = CreateObject("CDO.Message") Email.From = Sender Email.To = Receiver Email.Subject = Subject Email.Textbody = Text 'Email.AddAttachment Attachment With Email.Configuration.Fields .Item(NameSpace&"sendusing") = 2 .Item(NameSpace&"smtpserver") = Smtp .Item(NameSpace&"smtpserverport") = Port .Item(NameSpace&"smtpauthenticate") = 1 .Item(NameSpace&"sendusername") = Sender .Item(NameSpace&"sendpassword") = Sender_PassWord .Item(NameSpace&"smtpconnectiontimeout") = 60 .Update End With Email.Send Set Email=Nothing
2.查看文件是否生成,或文件中是否有字段,加报警
适用场景:查看每天的数据库备份文件是否生成,没有生成则报警;查看每天的备份日志文件中是否有备份成功的字段,没有则报警;
查找没有某后缀的文件则邮件报警.bat
@echo off
rem 设置取当前的时间,格式:2018-02-06
set now=%Date:~0,4%-%Date:~5,2%-%Date:~8,2%
if exist "d:\test\%now%.dmp" (echo ok ) else (call sendmaildb.vbs)
查找某文件没有某字符则邮件报警.bat
set now=%Date:~0,4%%Date:~5,2%%Date:~8,2% rem 检查windows服务器上的备份情况并报警:查看日志文件中有没有正常的结尾信息,如果没有则报警。 find /i "Export terminated successfully without warnings." D:\test\user%now%.log>nul if %errorlevel% EQU 0 (echo ok) else (call sendmaillog.vbs)
查找某文件有某字符则邮件报警.bat
@echo off
find /i "ORA-" D:\test\*.log>nul
if %errorlevel% EQU 0 (call sendmaillog.vbs) else (echo ok)
pause
3.删除过期的文件
适用场景:在磁盘容量有限的情况下,只保留最近一个周的备份数据,则需要我们每天自动删除七天以前的备份数据
rem 查找test下7天前的备份并删除 set now=%Date:~0,4%%Date:~5,2%%Date:~8,2% rem forfiles /p "D:\test" /s /m *.* /d -7 /c "cmd /c del @path"
将脚本日志进行导出:
方法一:
@echo off
(
echo 开始
.......
echo 完成!!!
) >> d:/test/dbbak.log 2> d:/test/dbbak_error.log
方法2:
创建一个test.bat 内容为执行脚本和日志输出,如下
D:\script\ggappbak.cmd > d:/test/dbbak.log 2> d:/test/dbbak_error.log
到时候你执行test.bat就行
以上脚本需要配合win计划任务执行。
4.检测程序是否正常启动,未启动则尝试启动。
:1 tasklist | findstr /i nginx.exe > nul 2>nul if %ERRORLEVEL%==1 (start nginx) else (exit) ping 127.1 -n 20 >nul 2>nul goto 1
5.备份脚本
依次执行:复制→压缩→ftp传输到异地→删除临时文件
启动脚本:startbackup.cmd
D:\script\ggappbak.cmd > D:\script\log.txt 2> D:\script\error.txt
备份脚本:
ggappbak.cmd
rem 获取当前服务器的IP地址,无需改动 for /f "tokens=2 delims=:" %%q in ('ipconfig^|find /i "ipv4"') do (set hostip=%%q ) set ipv4=%hostip:~1,-1% rem 获取当前系统日期,无需改动 set today=%date:~0,4%%date:~5,2%%date:~8,2% rem 创建备份存放目录,目录命名为当前系统日期 mkdir D:\IPIBAK\%today% rem 拷贝IPI目录下的所有文件到备份目录 xcopy /E /Y /H /K /R "D:\ipi" "D:\IPIBAK\%today%\" rem 调用WinRAR程序对备份好的文件目录进行压缩,压缩后的文件用IP地址命名 "D:\Program Files\WinRAR\WinRAR.exe" m -r -ep1 "D:\IPIBAK\%ipv4%_%today%.rar" "D:\IPIBAK\%today%\" set ftpfilename=autoftp.cfg rem ============== 创建FTP传输配置文件 ============== rem 连接指定端口的ftp echo open 192.168.10.2 21> "%ftpfilename%" rem FTP用户名 echo ggappbak>> "%ftpfilename%" rem FTP密码 echo password>> "%ftpfilename%" rem FTP常见配置项 echo prompt>> "%ftpfilename%" echo binary>> "%ftpfilename%" echo quote opts utf8 off>> "%ftpfilename%" rem 定义向远程FTP上传压缩好的备份文件 echo put D:\IPIBAK\%ipv4%_%today%.rar>> "%ftpfilename%" echo bye>> "%ftpfilename%" rem ================================================= rem 执行ftp命令上传压缩好的备份文件,根据实际情况调整远程FTP服务器的IP地址 ftp -s:"%ftpfilename%" rem 清理本地产生的临时文件 rd /s /Q D:\IPIBAK\ del "%ftpfilename%"