📄 servicecwbackup.~pas
字号:
if nIMResult = 0 then begin
iRet := IM_SendSM('CW自动备份失败!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
end;
end
else//备份复制存放到另一个目录
begin
LogAlarmToText('开始备份' + sAZML + '目录到' + sDir + '目录...');
Result := CopyDirectory(sAZML,sDir);
if Result then
begin
LogAlarmToText('目录备份结束。');
//备份成功检查已经备份的份数,删除过期的备份
DelBackUpFile(iBackUpCopy,sBFML);
//上传到FTP
if bPutFtp then begin
LogAlarmToText('上传' + sDir + '目录到FTP服务器.');
UploadPerFTP(sDir,pvs_Ftp_FtpDir[0],MyFtpClient);
LogAlarmToText('目录上传完毕.');
end;
end
else
begin
Result := False;
LogAlarmToText('目录备份失败!');
if nIMResult = 0 then begin
iRet := IM_SendSM('CW自动备份失败!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
end;
end;
//启动所有服务
StarAllServices(sRemoveHost,iServiceNum,sServiceName);
end;
constructor MyBackUp.Create(CWVCLZIP:TVCLZip;FtpClient:TIdFTP;BackupRun:Boolean);
begin
MyVCLZIP := CWVCLZIP;
MyFtpClient := FtpClient;
inherited Create(BackupRun);//False线程建立立即执行
end;
procedure MyBackUp.Execute;
var
nTemp : Integer;
bCHK : Boolean;
// Year, Month, Day, Hour, Min, Sec, MSec: Word;
Hour, Min, Sec, MSec: Word;
// iRet : LongInt;
begin
//线程循环检查是否到了备份时间
while not Terminated do begin
sRemoveHost := '';
bCHK := True;
//DecodeDate(Now,Year,Month,Day);
DecodeTime(Now,Hour,Min,Sec,MSec);
//是否指定时间
if ((iBackUpHour = Hour) and (iBackUpMinute = Min)) then
begin
pvbBackUpRunning := True;
//开始备份
case iBackUpScheme of
//每日备份
0: bCHK := BackUP;
1://单日备份
begin
nTemp := StrToInt(FormatDateTime('dd',Now));
if (nTemp mod 2) <> 0 then bCHK := BackUP;
end;
2://双日备份
begin
nTemp := StrToInt(FormatDateTime('dd',Now));
if (nTemp mod 2) = 0 then bCHK := BackUP;
end;
3://每周备份,定周日备份
begin
//1是星期天
if (DayOfWeek(Now) = 1) then bCHK := BackUP;
end;
4://每月备份,定每月1日备份
begin
nTemp := StrToInt(FormatDateTime('dd',Now));
//if (DayOfTheMonth(Now) = 1) then bCHK := BackUP;
if (nTemp = 1) then bCHK := BackUP;
end;
end;
{
//备份成功检查已经备份的份数,删除过期的备份
if bCHK then DelBackUpFile(iBackUpCopy,sBFML) else if nIMResult = 0 then begin
iRet := IM_SendSM('CW自动备份失败!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
}
pvbBackUpRunning := False;
//动态释放内存
if bFreeMemory then FreeSystemMemory;
end;
Sleep(20000);//休眠20秒
end;
LogAlarmToText('CW自动备份线程停止。');
end;
procedure TCW_Auto_Backup.VCLZipCWFileNameForSplitPart(Sender: TObject;
var FName: String; PartNum: Integer; SplitType: TSplitPartType);
begin
if (VCLZipCW.BlockMode = bmStandard) then
begin
if (SplitType = spLast) then
FName := VCLZipCW.ZipName + '.zip'
else
FName := VCLZipCW.ZipName + '.' + Format('z%2.2d', [PartNum]);
end
else
FName := VCLZipCW.ZipName + '.ZIP.' + Format('%3.3d', [PartNum]);
end;
procedure TCW_Auto_Backup.ServiceCreate(Sender: TObject);
var
iReturn:Integer;
begin
//设置日期与时间的格式,避免因系统设置不同取日期时间错误
DateSeparator := '-';
ShortDateFormat := 'yyyy-mm-dd';
LongDateFormat := 'yyyy-mm-dd';
TimeSeparator := ':';
ShortTimeFormat := 'hh:nn:ss';
LongTimeFormat := 'hh:nn:ss';
//设置路径
ChDir(ExtractFilePath(Paramstr(0)));
//读配置文件
ReadIniFile;
//加载短信网关驱动
iReturn := IM_Init(pvsIM_IP,pvsIM_UserName,pvsIM_UserPassword,pvsIM_ApiName);
if iReturn = 0 then LogAlarmToText('装载ImApi.DLL失败!') else
LogAlarmToText('装载ImApi.DLL成功!');
if nIMResult = 0 then LogAlarmToText('短信网关初始化成功!') else
if nIMResult = -999 then
LogAlarmToText('ImApi.dll丢失,短信功能禁止!')
else
LogAlarmToText('短信网关初始化失败!错误代码为:'+ IntToStr(nIMResult)+'。');
end;
procedure TCW_Auto_Backup.ServiceStart(Sender: TService;
var Started: Boolean);
var
iRet:LongInt;
begin
//CW备份服务启动立即创建线程并执行
pvbBackUpRunning := False;
BackUpThread := MyBackUp.Create(VCLZipCW,CWFtpClient,False);
if BackUpThread <> nil then
begin
LogAlarmToText('CW自动备份线程启动。');
if nIMResult = 0 then begin
iRet := IM_SendSM('CW自动备份线程启动!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
end
else begin
LogAlarmToText('CW自动备份线程启动失败!');
if nIMResult = 0 then begin
iRet := IM_SendSM('CW自动备份线程启动失败!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
end;
//服务守护线程启动
WatchThread := MyWatch.Create(VCLZipCW,CWFtpClient,False);
if WatchThread <> nil then
LogAlarmToText('CW服务守护线程启动。')
else begin
LogAlarmToText('CW服务守护线程启动失败!');
end;
//FTP备份服务线程启动
FtpClientThread := MyFtpClient.Create(CWFtpClient,False);
if WatchThread <> nil then
LogAlarmToText('FTP备份线程启动。')
else begin
LogAlarmToText('FTP备份线程启动失败!');
end;
end;
procedure TCW_Auto_Backup.ServiceStop(Sender: TService;
var Stopped: Boolean);
var
iRet: LongInt;
begin
//停止备份线程
BackUpThread.Terminate;
//停止服务守护线程
WatchThread.Terminate;
//停止FTP备份线程
FtpClientThread.Terminate;
//短信通知自动备份、短信转服务停止
if nIMResult =0 then begin
iRet := IM_SendSM('CW自动备份服务停止!','',0,pvsIM_Phone);
if iRet < 0 then LogAlarmToText('发送短信失败,返回代码:' + IntToStr(iRet) + '。');
end;
end;
procedure TCW_Auto_Backup.CWFtpClientStatus(ASender: TObject;
const AStatus: TIdStatus; const AStatusText: String);
begin
case AStatus of
hsResolving: LogAlarmToText('FTP Status:Resolving');
hsConnecting: LogAlarmToText('FTP Status:Connecting');
hsConnected: LogAlarmToText('FTP Status:Connected');
hsDisconnecting: LogAlarmToText('FTP Status:Disconnecting');
hsDisconnected: LogAlarmToText('FTP Status:Disconnected');
hsStatusText: LogAlarmToText('FTP Status:StatusText=' + AStatusText);
//ftpTransfer: LogAlarmToText('FTP Status:Transfer');
//ftpReady: LogAlarmToText('FTP Status:Ready');
ftpAborted: LogAlarmToText('FTP Status:Aborted');
end;
end;
procedure TCW_Auto_Backup.CWFtpClientWorkBegin(ASender: TObject;
AWorkMode: TWorkMode; AWorkCountMax: Integer);
begin
LogAlarmToText('开始上传...');
end;
procedure TCW_Auto_Backup.CWFtpClientWorkEnd(ASender: TObject;
AWorkMode: TWorkMode);
begin
LogAlarmToText('上传结束.');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -