真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

perl多線程rsync備份文件到遠(yuǎn)端主機(jī)

需求:

成都創(chuàng)新互聯(lián)長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為東臺(tái)企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),東臺(tái)網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

主機(jī)上有上百G的備份文件要rsync到遠(yuǎn)端主機(jī),我們將大文件進(jìn)行切割為幾十個(gè)小文件進(jìn)行多線程傳輸。

這里使用14個(gè)1G的文件進(jìn)行演示:

[root@vm0 test]# pwd
/root/test
[root@vm0 test]# ll
總用量 13631540
-rw-r--r--. 1 root root 1073741824 6月  11 18:29 test10.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:30 test11.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:31 test12.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:31 test13.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:32 test14.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:23 test2.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:24 test3.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:25 test4.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:26 test5.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:26 test6.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:27 test7.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:28 test8.data
-rw-r--r--. 1 root root 1073741824 6月  11 18:29 test9.data
[root@vm0 test]#

腳本名:tq.pl

#!/usr/bin/env perl

use strict;
use threads;
use Thread::Queue;
use File::Find;
use File::Rsync;
use POSIX qw(strftime);

#本地主機(jī)文件目錄
my $srcFilePath='/root/test/';
#使用隊(duì)列,將要備份的文件逐一插入隊(duì)列
my $fileQueue = Thread::Queue->new();
#遠(yuǎn)端主機(jī)備份目錄
my $remotedir='lansgg@192.168.137.129::lansggtest';
#最大線程數(shù)
my $thread_max = 5;
my $backupTime = strftime("%Y%m%d%H%M%S",localtime(time));
print "begin : $backupTime\n";

#檢索要備份目錄下的所有文件,. 除外。 linux中 . 代表當(dāng)前目錄
sub findAllFile {
        unless ( $_ eq '.'){
        print "corrent file : $File::Find::name \n";
        $fileQueue->enqueue($_);
        }
}

find(\&findAllFile,$srcFilePath);

#使用rsync進(jìn)行傳輸
sub rsync {
    my $file = shift;
    print "rsync -- $file \n";
    my $obj = File::Rsync->new(
    {
    archive    => 1,
    compress => 1,
    checksum => 1,
    recursive => 1,
    times => 1,
#    verbose => 1,
    timeout => 300,
    progress => 1,
    stats => 1,
    'ignore-times' => 1,
    'password-file' => './rsync.pass',
    }
);

$obj->exec( { src => "$srcFilePath$file", dest => $remotedir } ) or warn "rsync Failed ! \n";

#print $obj->out;

}
#檢查隊(duì)列中未傳輸?shù)奈募?while ($fileQueue->pending()){
    if (scalar(threads->list()) < $thread_max ){
         my $readQueue = $fileQueue->dequeue();        
#        print "current file Queue is $readQueue \n";
#生成線程
        threads->create(\&rsync,$readQueue);

#查看當(dāng)前線程總數(shù)
        my $thread_count = threads->list();
#        print "thread_count is $thread_count\n"; 
    }
#確定當(dāng)前線程是否作業(yè)完成,進(jìn)行回收
    foreach my $thread (threads->list(threads::all)){
        if ($thread->is_joinable()){
                $thread->join();
            }
        }
}

#join掉剩下的線程(因?yàn)樵趙hile中的隊(duì)列為空時(shí),可能還有線程在執(zhí)行,但是此時(shí)程序?qū)⑼顺鰓hile循環(huán),所以這里需要額外程序join掉剩下的線程)

foreach my $thread ( threads->list(threads::all) ) {
    $thread->join();
    }


$backupTime = strftime("%Y%m%d%H%M%S",localtime(time));
print "end : $backupTime\n";

此腳本是使用了核心功能,后期可以加上日志記錄,郵件發(fā)送等功能。

當(dāng)我們執(zhí)行該腳本時(shí),查看主機(jī)線程情況

[root@vm0 pl]# ps -ef |grep tq
root       6377   2152 88 19:05 pts/3    00:00:12 perl ./tq.pl
[root@vm0 pl]# pstree -p 6377
perl(6377)─┬─rsync(6379)
           ├─rsync(6381)
           ├─rsync(6383)
           ├─rsync(6385)
           ├─rsync(6387)
           ├─{perl}(6378)
           ├─{perl}(6380)
           ├─{perl}(6382)
           ├─{perl}(6384)
           └─{perl}(6386)
          
 [root@vm0 pl]# ps -ef |grep rsync
root       6379   6377 14 19:05 pts/3    00:00:14 rsync --archive --checksum --compress --ignore-times --progress --recursive --stats --times --password-file=./rsync.pass --timeout=300 /root/test//test13.data lansgg@192.168.137.129::lansggtest
root       6381   6377 14 19:05 pts/3    00:00:14 rsync --archive --checksum --compress --ignore-times --progress --recursive --stats --times --password-file=./rsync.pass --timeout=300 /root/test//test12.data lansgg@192.168.137.129::lansggtest
root       6383   6377 14 19:05 pts/3    00:00:14 rsync --archive --checksum --compress --ignore-times --progress --recursive --stats --times --password-file=./rsync.pass --timeout=300 /root/test//test1.data lansgg@192.168.137.129::lansggtest
root       6385   6377 14 19:05 pts/3    00:00:14 rsync --archive --checksum --compress --ignore-times --progress --recursive --stats --times --password-file=./rsync.pass --timeout=300 /root/test//test8.data lansgg@192.168.137.129::lansggtest
root       6387   6377 12 19:05 pts/3    00:00:12 rsync --archive --checksum --compress --ignore-times --progress --recursive --stats --times --password-file=./rsync.pass --timeout=300 /root/test//test3.data lansgg@192.168.137.129::lansggtest
root       6399   2193  0 19:06 pts/2    00:00:00 grep rsync

網(wǎng)頁(yè)標(biāo)題:perl多線程rsync備份文件到遠(yuǎn)端主機(jī)
本文鏈接:http://weahome.cn/article/ipsodi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部