perl下网站批量更新文件的应用
创始人
2024-02-14 01:00:15
0

在发布网站的时候,由于要更新的文件比较多,有时候漏传,或者传错了文件,这样后果是很严重的,直接引起网站的异常,所以写了一个自动同步测试服务器的程序,以批量完成文件的更新。

环境,一台测试服务器,一台网站服务器
需求,将测试服务器更新的文件拉取到网站服务器上,网站对应的目录结构都相同。
思路,用perl实现ftp的下载机制,自动将更新文件村放到相应目录,将更新的旧文件按照当前日志进行备份,同时显示更新文件的进度(百分比)。

执行结果如下:

[root@drbd-2 crontab]# ./test.pl
 60% [==========================================                                  ]
3 files is download ok!
2 files is lost...........
this files have losted :
/var/ftp/pub/aa
/var/ftp/pub/bb


代码如下:


#!/usr/bin/perl -w

use strict;

use Net::FTP;
use File::Copy;
use Date::Manip;
use File::Basename;
use Term::ProgressBar;

my $server      = '192.168.1.100';
my $port        = '21';
my $user        = 'upload';
my $pw          = '123456';
my $file        = '/usr/local/crontab/upload';
my $backup_path = '/var/ftp/backup';

open FILE, "< $file"
  or die "can't open $file..... ($!)";

my @failed_files = ();

sub ftp() {
    my $ftp =
      Net::FTP->new( $server, Port => $port, Debug => 0, Timeout => 600 )
      or die "Cannot connect.\n";
    $ftp->login( $user, $pw )
      or die "Could not login.\n";

    my $get = 0;

    open F2, "< $file" or die $!;
    my $number = grep { !/^\s*$/ } ;
    close F2;

    my $progress = Term::ProgressBar->new( { count => $number } );

    $ftp->binary;

    foreach () {

        $_ =~ tr/\t //d;
        if ( $_ =~ /^\s*$/ ) {
            next;
        }

        chomp;

        my $server_path = dirname($_);
        my $server_file = basename($_);

        my $temp_path = substr( $server_path, index( $server_path, "pub" ) );


        my $local_path = $server_path;
        if ( -e $local_path ) {

        }
        else {
            $ENV{"umask"} = "022";
            system("mkdir -p $server_path");
        }

        my $local_file = $server_path . "/$server_file";
        if ( -e $local_file ) {


            my $now_time = localtime();
            my $today_dir = UnixDate( "$now_time", "%Y-%m-%d_%H:%M" );
            system("mkdir -p $backup_path/$today_dir/$temp_path");
            move( "$local_file", $backup_path . "/$today_dir/$temp_path" )
              or die "mv file failed: $!";
        }

        $ftp->cwd($server_path)
          or die "Cannot change working directory. $ftp->message\n";
        if ( $ftp->get( $server_file, $local_file ) ) {
            $progress->update( ++$get );
        }
        else {
            push( @failed_files, $local_file );
        }
    }

    print "$get files is download ok!" . "\n";
    my $lost = $number - $get;
    print "$lost files is lost..........." . "\n";
}

&ftp();

for (@failed_files) {
    print;
    print "\n";

}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...