Linux側クライアント、PC側サーバの役割でクライアント側からファイルをFTPによりダウンロードします。
64KBのファイルを400msecに一回の繰り返しで数十回受信するとFTPのところでHangUpしてしまいます。
この障害は数回目で発生することもあれば20回無事通り抜けることもあります。
障害の原因がクライアント側なのかサーバ側なのか特定できていません。
クライアント側LinuxのプログラムではFTP受信は専用スレッドを設け、メインと分離していますが、受信スレッドに十分なリソースが配分されないことが原因かなとも思っています。
Windows側はFTP6サーバをコンパネ>『プログラムと機能』で組み込んでいます。
FTPクライアント側:
Linux2.6.18-at9 Debian PowerPC 内部クロック300MHz
メインスレッド側からメッセージキューにより開始信号を受け
system("msh fileRcv.sh file");
により、Winodws側にファイル送信を要求します。
fileRcv.shの内容は:
#!/bin/sh
HOST_NAME="192.168.1.3"
USER="ftp"
PASSWORD=NULL
ftp -n ${HOST_NAME} >&2 >ftpLog.txt << _EOF_
user ${USER} ${PASSWORD}
bin
get ${FILE_NAME}
bye
_EOF_
exit
です。
解決には何よりもエラーLOGを取得することが先決ですが
ftp -n ${HOST_NAME} >&2 >ftpLog.txt << _EOF_
の記述に問題があるのか、うまくエラーLOGを取得できません。
何とか得られた結果は以下の通りでした:
receive aborted
waiting for remote to finish abort
この内容では解決にはなりません。
なにか解決のヒントがあればお願いいたします。
No.4ベストアンサー
- 回答日時:
>これは可能でしたのでテストしてみました。
>結果は
>?Invalid commandが各アクセスについて2行増加してしまいました。
私の意図が通じてないですが、もしかして、組み込み用Linuxとかで、サーバー機やデスクトップ機のようなシェルプロンプト(Terminal)が存在しないと言うことでしょうか?
ということだと、おそらくスクリプトの書き方の問題ではないですね。
>障害の原因がクライアント側なのかサーバ側なのか特定できていません。
普通のLinux機をクライアントにして同じ事をやってみれば切り分けられます。
あるいは、Windows側に、WiresharkなどのTCP/IP通信のログを取れるツールを入れて、通信内容を調べるとか。
この回答への補足
notnot様
申し上げていませんでしたが、組み込み用Linuxです。シェルプロンプトはありません。
bashもなかったのでユーザランドからmsh(Mini Shell ?)というのを見つけて組み込みました。
Winodew Vista FTPサーバ側が問題である可能性は少ないのではないかと考えています。サーバ側には該当ファイルがあればOpenして書換え途中でもFTP受信はできるようです。この場合は障害という現象にはならず内容が定まらないだけです。
普通のLinux機は手元にないのですが、PC側のVMwarePlayer上でFullのLinuxが動いているのでここからdownload要求を出す手もあるかもしれません。
このシステム特有の問題とも考えられるのでベンダーにサポートを求めています。そのアンサーをまっていたので返信が遅れてしまいました。
進展がありましたら報告いたします。ありがとうございました。
No.3
- 回答日時:
ncftpget 使ってみればいかがでしょうか。
http://digit.que.ne.jp/visit/index.cgi?LinuxZaur …
上記ページに『dオプションはなぜファイル転送が失敗しているかを確認したい場合には大変有用なオプションです。このオプションにより、指定する作業に対するFTPセッション全体の内容を出力してくれますので、あなたの考え違いを示唆してくれるでしょう。もしあなたが特にデバッグ情報のアウトプット先ファイルを指定しなかった場合、デバッグ情報は標準出力に出力され、画面に表示されます。』とあります。
※ ncftpは多くのLinuxでパッケージとして簡単に導入可能かと思います。
saijyo_739様
Resありがとうございます。
さっそくテストにかかったのですが、ncftpはライブラリ中にありませんでした。
このシステムを提供したVendorに問い合わせてみます。
ありがとうございました。
No.2
- 回答日時:
>それとも_EOF_で囲まれたftp接続後のcommandに問題があると考えるべきなのでしょうか?。
そうですね。
>user=ftp, password=NULL, つまりanonymousであること
このあたりでしょう。
手でコマンドを打って、
ftp -n 192.168.1.3
user ftp NULL
でログイン出来ますか?anonymosユーザに対しては、パスワードにメールアドレス形式を要求する設定もありますけど、そのあたりとか。
あと、Linuxでスクリプト中からftpでファイルを取得するのであれば、ftpコマンドでなくwgetコマンドを使うのが普通だとおもうので、インストール可能ならそちらを使ってみるとか。
wget ftp://192.168.1.3/file
notnot様
Resありがとうございます。
ftp -n 192.168.1.3
user ftp NULL
これは可能でしたのでテストしてみました。
結果は
?Invalid commandが各アクセスについて2行増加してしまいました。
理由はわかりません。
system("msh fileRcv.sh file");
のPermissionに問題がある可能性もあります。
推奨していただいたwgetですが、Libraryの中にありませんでした。このLinuxは小規模なハードウエアの上で動作するTiny Versionで、現在使用しているFTPクライアントもユーザランドから追加したものです。
ご示唆ありがとうございました。
No.1
- 回答日時:
とりあえず出力のログ保存に関してだけであれば、
>&2 >ftpLog.txt
だと、リダイレクトの記述上でログが取れて居ないのではないでしょうか。
標準出力と標準エラー出力の両方共同じファイルに書き出したいのであれば、こうとか
>ftpLog.txt 2>&1
ただしこれだとシェルスクリプト叩くたびにファイルの中身を上書きしてしまうので、追記していきたいならこうですね
>>ftpLog.txt 2>&1
この回答への補足
sholmes様
回答ありがとうございます。
初歩的なリダイレクトが分かりませんでした。修正の結果、Logが取得できました。
1受信ごとに
?Invalid commnad
が3回出ていることが分かりました。
ftp -n ${HOST_NAME} >>ftpLog.txt 2>&1 << _EOF_
user ${USER} ${PASSWORD}
bin
get ${FILE_NAME}
bye
_EOF_
上記シェルスクリプトに含まれるcomandは
ftp -n
以外ありません。
それとも_EOF_で囲まれたftp接続後のcommandに問題があると考えるべきなのでしょうか?。
user=ftp, password=NULL, つまりanonymousであること、あるいは{FILE_NAME}がシェル起動時の引数となっていることが問題となるのか判断できません。
大部分はこのアラームがありながら受信できており、突発的に発生する理由が分かりません。
何かご示唆いただけることがあればお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- プロバイダー・ISP hpb22の接続方法の変更 1 2023/08/06 18:47
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- ドメイン・サーバー・クラウドサービス FileZillaを使用してwpXサーバーに接続できない 2 2022/03/29 21:02
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# コンソールアプリでのログ出力
-
CSVファイルの時刻の形式について
-
Acrobat参照設定
-
CシェルとCOBOLについて
-
ショートカットで起動した場合...
-
ファイナルカットで編集した動...
-
オートキャドの保存方法でPDFで...
-
Thunderbird 受信メールからの...
-
“ファイルに出力”した印刷ファ...
-
accessでクエリをExcelにエクス...
-
Excelファイル 修復不可能
-
excel vbaでのxml出力がわかり...
-
クエリをエクセルファイルへの出力
-
エクセル2003 VBAでフ...
-
コマンドプロンプトのテキスト...
-
ATTファイルってどうやって開け...
-
CList, CArchive, CFileの組み...
-
Excel VBAが徐々に遅くなる
-
HTMLまたはJavaScriptでフ...
-
VBAで生成されたExcelファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
コマンドプロンプトのテキスト...
-
COBOL、項目末尾に空白がある場...
-
Thunderbird 受信メールからの...
-
VB6.0でExcel,PDF,Word出力方法
-
ショートカットで起動した場合...
-
AccessのレポートからPDFをペー...
-
accessのリポートを、excelに出...
-
Acrobat参照設定
-
Excel で「OLE は現在使用でき...
-
ファイナルカットで編集した動...
-
WshShellから起動したbat(ftp)...
-
COBOL FILLER
-
エクセルが裏で動いたままなん...
-
Fortranでの出力ファイル
-
マクロについて質問です。 現在...
-
iTextでPDFを表示させたら日本...
-
TransferSpreadsheetでフルパス...
-
ACCESS2002(or2003)の日付表示...
おすすめ情報