mieki256's diary



2005/12/04() [n年前の日記]

#5 [windows] _batファイルによるFTP自動実行(Windowsタスク)- ぽんこつWEBサーバー構築

wifky は編集前の状態をバックアップしてくれないので、使うにあたっては別途バックアップの仕組みが必要らしい。ということで、Windows 関係でftpを使ったバックアップ方法について検索。

_バッチ・スクリプトとftpコマンド - Windows Server Insider :

_@IT:Windows TIPS -- Tips:バッチ・ファイル中で日付をファイル名に使用する
_@IT:Windows TIPS -- Tips:スクリプトで使うftpコマンド
_@IT:Windows TIPS -- Tips:WSHで簡単なバックアップツールを作成する
_BASP21 FTPオブジェクト
_Net::FTPの練習 - PerlでFTP転送

_旧・いずみのにっき(1999-04-08)
実は、ルータの制御を、DBから読んだデータを ftpすることで行うサブシステムなのですが、工期の関係から、perlで Net::FTPモジュールを使ってさくさく実装してあったんですよ。で、テスト用の実機がやっと使えるよーになったのでテストしてみたところ…なんと、ルータに送信したファイルが、必ず途中までで切れちゃうのです…
さっそくデバッガで追ったのですが、その結果、このルータの ftpの実装がインチキで、どーやら「データ用ソケットから順次読み出して、read()が失敗したところで受信終了」ってやっちゃうっぽいのです!そして、Net::FTPモジュールは、転送ファイルを 1kバイト毎に syswrite()しているため、その 1kバイト分で転送が勝手に「正常終了」させられてしまうのですね…(怒) 当然のことながら、本来は EOFを読むかタイムアウトするまで読み続けなければいけないところ。

旧・いずみのにっき(1999-04-08) より

ふむ…。

結局perlでちょこちょこと :

#!/usr/bin/perl

use strict;
use Net::FTP;
use POSIX 'strftime';

my $host = "my.host.name";
my $username = "myloginname";
my $userpass = "mypassword";
my $remote_dir = "mydirectoryname";
my $local_dir = "mylocaldirectoryname";

my $now = strftime "%Y%m%d_%H%M%S", localtime;

$local_dir .= "/" . $now;
mkdir $local_dir, 0777 or die $!;
chdir $local_dir or die $!;

my $ftp = Net::FTP->new($host, Debug => 0) || die "Cannot connect to $host : $@";
$ftp->login($username, $userpass) || die "Cannot login ", $ftp->message;
$ftp->cwd($remote_dir) || die "Cannot change working directory ", $ftp->message;
$ftp->binary;
my @flist = $ftp->ls;

foreach my $f (@flist) {
	next if $f =~ /^\.{1,2}$/;
	$ftp->get($f) || die "get failed ", $ftp->message;
};

$ftp->quit;

print "success. ", (strftime "%Y/%m/%d %H:%M:%S", localtime), "\n";
exit;
各所からコピペして作成。

以上です。

過去ログ表示

Prev - 2005/12 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project