Perl 备份Svn,利用7z 打包并且加密,上传至FTP

本文介绍了一段Perl脚本,用于自动备份指定的Svn仓库,并将其上传至FTP服务器。脚本首先获取当前日期和前7天的日期,然后读取配置文件以获取所需的FTP凭据、仓库路径、备份目录等信息。脚本通过遍历备份列表,依次备份每个仓库,并打包成7z文件。最后,脚本会删除FTP上的旧备份,并上传当前的7z文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::FTP;
  4. use Config::Tiny;
  5. use POSIX "strftime";

  6. # 获取系统当前日期
  7. my $data_now = strftime( "%Y-%m-%d", localtime( time() - 86400 * 0 ) );

  8. # 获取前7天日期
  9. my $data5 = strftime( "%Y-%m-%d", localtime( time() - 86400 * 7 ) );

  10. my $Config = Config::Tiny->new();
  11. $Config = Config::Tiny->read('Config.ini');

  12. # Net::Ftp
  13. my $FTP_User = $Config->{Net_FTP}->{FTP_User};
  14. my $FTP_Password = $Config->{Net_FTP}->{FTP_Password};
  15. my $FTP_Ipaddre = $Config->{Net_FTP}->{FTP_Ipaddre};

  16. # 备份列表
  17. my $Backup_List = $Config->{Settings}->{Backup_List};

  18. # Subversion 仓库路径
  19. my $svn_repos = $Config->{Settings}->{Svn_Repos_Path};

  20. # 目标路径
  21. my $backup_dir = $Config->{Settings}->{Backup_Tirget};

  22. # Password
  23. my $Zip_Passwd = $Config->{Settings}->{Zip_Passwd};

  24. # Svn仓库
  25. my @repos = split /,/ => $Backup_List;
  26. foreach (@repos) {
  27.     &start_thread($_);
  28. }

  29. sub start_thread {
  30.     my ($repos_loop) = @_;

  31.     my $next_backup_file = "$repos_loop\_$data_now";

  32.     # 定义backup路径
  33.     my $repos_Path = "$backup_dir/Temp/$repos_loop";

  34.     # 如果目录不存就创建
  35.     system("mkdir -p $repos_Path") if ( !-"$repos_Path" );

  36.     &LOGINFO( 'INFO',"正在备份 ---> $svn_repos/$repos_loop");

  37.     system("svnadmin hotcopy $svn_repos/$repos_loop $repos_Path");

  38. }

  39. # 存放包路径
  40. mkdir("$backup_dir/Package") if ( !-"$backup_dir/Package" );

  41. # 设置口令为123456
  42. &LOGINFO( 'INFO',"正在打包 7z a -bd -p$Zip_Passwd $backup_dir/Package/Svn_$data_now.7z $backup_dir/Temp");

  43. system("7z a -bd -p$Zip_Passwd $backup_dir/Package/Svn_$data_now.7z $backup_dir/Temp");

  44. # 删除本地前次备份的7z文件
  45. system("rm -rf $backup_dir/Package/Svn_$data5.7z");

  46. # Delete Temp
  47. system("rm -rf $backup_dir/Temp");

  48. &Net_FTP( "$FTP_User", "$FTP_Password", "$FTP_Ipaddre", "Subversion", "Put" );

  49. #Net_FTP文件上传部分
  50. sub Net_FTP {
  51.     my ( $FTP_User, $FTP_Password, $FTP_Ipaddre, $FTP_Backup, $Action ) = @_;

  52.     my $ftp = Net::FTP->new(
  53.         "$FTP_Ipaddre",
  54.         Debug => 0,
  55.         Timeout => 360
  56.     ) or die &LOGINFO( 'ERROR', "不能连接到FTP服务器,错误原因:" . $@ );

  57.     if ( $ftp->login( $FTP_User, $FTP_Password ) ) {
  58.         &LOGINFO( 'INFO', "Net::FTP 成功连接服务器$FTP_Ipaddre" );
  59.     }
  60.     else {
  61.         &LOGINFO( 'ERROR', "Net::FTP 不能登陆FTP $FTP_Ipaddre服务器,错误原因:" . $@ );
  62.     }

  63.     #切换目录
  64.     $ftp->cwd("/$FTP_Backup"), my $FTP_error = $ftp->message;
  65.     if ( $FTP_error =~ /failed/i ) {
  66.         &LOGINFO( 'INFO', "$FTP_Backup 目录不存在,开始创建目录 $FTP_Backup" );
  67.         $ftp->mkdir($FTP_Backup);
  68.         &LOGINFO( 'INFO', "$FTP_Backup 目录创建完毕,并切换到目录创建目录" );
  69.         $ftp->cwd("/$FTP_Backup");
  70.     }

  71.     #删除FTP上前5天的备份
  72.     &LOGINFO( 'INFO', "删除FTP前5天的备份 /$FTP_Backup/Svn_$data5.7z" );
  73.     $ftp->delete("/$FTP_Backup/Svn_$data5.7z"), my $FTP_Error = $ftp->message;
  74.     &LOGINFO( 'INFO', "/$FTP_Backup/Svn_$data5.7z" );
  75.     &LOGINFO( 'INFO', "$FTP_Error" );

  76.     &LOGINFO( 'INFO', "Net::FTP 使用binary二进制格式上传" );
  77.     $ftp->binary();

  78.     #如果动作等于Put
  79.     if ( $Action eq "Put" ) {
  80.         &LOGINFO( 'INFO', "正在上传 至 $FTP_Backup" );
  81.         $ftp->put("$backup_dir/Package/Svn_$data_now.7z") or die &LOGINFO( 'ERROR', "上传 $backup_dir/Package/Svn_$data_now.7z 失败" );
  82.     }

  83.     &LOGINFO( 'INFO', "File Svn_$data_now.7z 上传 successfully\n" );
  84.     $ftp->quit;

  85. }

  86. sub current_time {
  87.     my $time_now = POSIX::strftime( "[%Y-%m-%d %H:%M:%S]", localtime );
  88.     return $time_now;
  89. }

  90. sub LOGINFO {
  91.     my ( $INFO, $Message ) = @_;
  92.     open FH, ">>logs/$data_now\.txt";
  93.     my $start_time = &current_time();
  94.     print("$start_time $INFO $Message \n");
  95.     print FH ("$start_time $INFO $Message \n");
  96.     close(FH);
  97. }

Config配置文件

  1. [Net_FTP]
    FTP_User=backup
    FTP_Password=110110
    FTP_Ipaddre=192.168.100.24

  2. [Settings]
  3. Backup_List=authcenter,buildtools  #需要备份的列表
  4. Svn_Repos_Path=/data/d_tech        #仓库根路径
  5. Backup_Tirget=/data/Svnback        #备份tirget路径
  6. Zip_Passwd=123456                  #Zip打包时设置的秘密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值