Mailiniz için çok teşekür ederim.
Perl konusunda çok yeni olduğum için sizden ricam aşağıdaki kodda bu işlemi
nasıl yapacağımı kısca belirtirsebiz senirim.Sciript bir dizin içerisini her
dakikada kontrol edeiyor yeni bir dosya bulduğu zaman onu ftp ile başka bir
yere kopyalıyor.Tabi bu durum dosya oluşturulurken çalışma ihtimali olduğu
için ( ki oldu ) dosyayı atmaya başladığ için eksik atmış oldu.Sizin
dediğiniz şelikde lsof komut bloğunu nerde yazmalıyım.
---------------------------------------------------------------------------------
#!/usr/bin/perl
use strict;
use Net::FTP;
#use File::Copy;
#
# Following variables are needed
my $directory="/ftpdir";
my $logfile="/var/log/xxftp.log";
my $destination="xx.xx.xx.xx";
my $login="test";
my $password="test!2011";
my $putdir="/FTP/akin/";
my $delay=60;
#
# program starts here
#
my $ftp;
my $newerr;
my @files;
my $file;
my $filecount;
my $line;
my $date;
chdir($directory) or die("$! Can't cd to $directory");
while (1) {
@files=();
$newerr=0;
logit("Starting new loop");
foreach(<*>) {
push @files,$_
}
my $filecount=@files;
logit("$filecount files to transfer");
if (not $filecount) {
logit("Nothing to do");
sleep $delay;
next;
}
$ftp=Net::FTP->new($destination,Timeout=>240) or $newerr=1;
if ($newerr) {
logit("Can't connect to $destination");
sleep $delay;
next;
}
$ftp->login("$login","$password") or $newerr=1;
if ($newerr) {
logit("Can't login $destination with $login,$password");
$ftp->quit;
sleep $delay;
next;
}
$ftp->binary(); # set binary mode
$ftp->cwd($putdir) or $newerr=1;
if ($newerr) {
logit("Can't cd to $putdir on $destination");
$ftp->quit;
sleep $delay;
next;
}
foreach(@files) {
$file=$_;
$newerr=0;
$ftp->put($file,$file) or $newerr=1;
if ($newerr) {
logit("Error transferring $file");
next;
}
unlink($file) or logit("$! can't unlink $file");;
}
# delay for next loop
sleep $delay;
}
sub logit {
$line=shift;
$date=localtime(time);
open(LOG,">>$logfile") or die("$! Can't open $logfile");
print LOG "$date: $file @files $line\n";
print "$date: $file @files $line\n";
close LOG;
}
--------------------------------------------------------------------------------------
2011/10/26 Devrim GÜNDÜZ <[email protected]>
> On Wed, 2011-10-26 at 16:06 +0300, Akın Temel wrote:
> >
> >
> > Kopyalanan dosyanın kopyalama işleminin bittiğini kotrol ederek başka
> > bi dizine kopyalama işlemini nasıl yapabilirim.
>
> Perl'de nasıl yapılır bilmiyorum, ama bash'de $? ile çıkış kodunu
> kontrol edebilirsiniz. Örneğin,
>
> if [ $? != 0 ]
> then
> echo "Kopyalama başarısız oldu!"
> exit 1
> fi
>
> gibi birşey. Perl için de ipucu verir belki.
> --
> Devrim GÜNDÜZ
> Principal Systems Engineer @ EnterpriseDB: http://www.enterprisedb.com
> PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
> Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
> http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz
>
> _______________________________________________
> Linux-sunucu E-Posta Listesi
> [email protected]
>
> Liste kurallarını http://liste.linux.org.tr/kurallar.php bağlantısından
> okuyabilirsiniz;
>
> Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen
> e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1
> dakika içinde üyeliğinizi sonlandırabilirsiniz.
> https://liste.linux.org.tr/mailman/listinfo/linux-sunucu
>
>
_______________________________________________
Linux-sunucu E-Posta Listesi
[email protected]
Liste kurallarını http://liste.linux.org.tr/kurallar.php bağlantısından
okuyabilirsiniz;
Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen
e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1
dakika içinde üyeliğinizi sonlandırabilirsiniz.
https://liste.linux.org.tr/mailman/listinfo/linux-sunucu