Windowsから、Linuxサーバにファイルを自動的に送る仕組みの例です。
2008/06の案件です。
要件)
Windwsのアプリで、特定フォルダーにファイルを自動生成するものがあります。
:このアプリは、単独実行で、Linuxへのファイル転送まではカバーしていないもの。
:日本語のコード変換は、とりあえず、Windowsアプリ側で行っている。
:運用にあわせて、Linux側で再度コード変換が必要かも、、、:適宜。
Linuxサーバは、sshのみを許可。scpで、自動的にファイルをアップロードする。
Linux側は、cronで、ファイルを処理するものとします。
~~~
実装方針)
実装期間も限られていることからも、
ゴリゴリコードを書くのではなく、出来合いの何かを持ってくる。
~~~
ネット探索)
[1]フォルダーのファイル更新をチェックする何か?ユーティリティはないか?
:行き着いた先は、
http://www10.plala.or.jp/tukaeru/soft/
http://www.vector.co.jp/soft/dl/win95/net/se275168.html
folders501.zip / 476,445Bytes / 2007.11.16
フォルダ監視
フリーソフトウェア
対応OS : Windows 98 Me 2000 XP Vista
Version 5.01 2007.11.21
:動作確認後、使えそうなので、実戦投入。既に、現時点で数ヶ月稼動実績あり。
[2]ファイル転送は、WinSCP3を使用している。コマンドで実行できるscp.exe的なもの?
:ここの存在は、Linuxでscp実装を確認した際、DOSコマンドを探した経緯あり。
:但し、実戦で使うのは、今回初めて。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
PuTTY Download Page
pscp.exe
をダウンロード。
~~~
使い方)
[1]Windows側)scp.exe
:今回、Linuxは、パスワード認証とします。
:鍵認証は動作未確認です。TODO)
:Linuxは、WinSCP等で問題なく、ファイル転送できているものとします。
*.exeで単独動作を確認しておきます。
C:\p20080628\tools\pscp -l aaa -pw bbb C:\p20080628\upload\example.txt 192.168.0.120:/home/aaa/uploadfiles
コマンドの指定内容は以下。
===
ユーザ:aaa
パスワード:bbb ※ファイルに埋め込みです。ここが厳しいですが。しょうがない、、、
転送元ファイル:C:\p20080628\upload\example.txt
Linuxサーバ:192.168.0.120
Linuxサーバ側、ユーザ:aaaのファイル格納先フォルダー:/home/aaa/uploadfiles
===
[2]Windows側)フォルダー監視
:監視するフォルダーを指定し、ファイル作成・変更・削除?時に
ファイル単位で実行するbatファイルを指定する。
:設定は、感覚的に違和感なくできるはずです。
※ユーザログイン時に常駐して、フォルダーの監視体制に入ります。
@@@
プログラム起動の設定
***
監視する間隔:1分 ※例)
レ変更ファイル検出時にプログラムを起動する
起動単位:ファイル
プログラム:実行するBATファイルをフルパスで指定する。
パラメータ:%FILENAME%
レプログラムが終了するまで待機する
レWindows起動時にフォルダ監視を実行する
@@@
バッチファイルに指定する内容例)
:通常、ファイルは、日付でrenameする。
※Windows OSで動きが違う。Win2KPro(YYMMDD),XP(YYYYMMDD)...:XP以降を推奨。
:処理したファイルは、別フォルダーに退避する。
===
@echo off
FOR %%V IN (%1) DO FOR /F "tokens=1-6 delims=/: " %%J IN ("%%~tV") DO set src_filename=%%J%%K%%L_%%M%%N%%O%%~xV
REN %1 %src_filename%
C:\p20080628\tools\pscp -l aaa -pw bbb C:\p20080628\upload\%src_filename% 192.168.0.120:/home/aaa/uploadfiles
move C:\p20080628\upload\%src_filename% C:\p20080628\upload_done
set src_filename=
===
~~~
[3]Linux側)cronの設定
[3-1]
例)2分インターバルで、ファイル取込処理。
*/2 * * * * /opt/p20080628/upload/upload.sh
[3-2]
cronがrootで実行。
===
# crontab -l ※内容参照
# crontab -r ※削除
# crontab -e ※編集
===
[3-3]
# cat upload.sh
#!/bin/sh
export LANG=ja_JP.UTF-8
...
ファイル処理を記述する。
~~~
end
0 件のコメント:
コメントを投稿