時間ごとに15分ごとにサーバーからファイルをダウンロードするlftpスクリプトを作成したいと思います。
誰でも私に何をすべきかを提案できますか?
ありがとう
答え1
最初:スクリプトを作成します。好きなように呼ぶことができます。私が電話しますdownloader.sh
。
#!/bin/bash
PROTOCOL="ftp"
URL="server.example.com"
LOCALDIR="/home/user/downloads"
REMOTEDIR="dir/remote/server/"
USER="user"
PASS="password"
REGEX="*.txt"
LOG="/home/user/script.log"
cd $LOCALDIR
if [ ! $? -eq 0 ]; then
echo "$(date "+%d/%m/%Y-%T") Cant cd to $LOCALDIR. Please make sure this local directory is valid" >> $LOG
fi
lftp $PROTOCOL://$URL <<- DOWNLOAD
user $USER "$PASS"
cd $REMOTEDIR
mget -E $REGEX
DOWNLOAD
if [ ! $? -eq 0 ]; then
echo "$(date "+%d/%m/%Y-%T") Cant download files. Make sure the credentials and server information are correct" >> $LOG
fi
第二:crontabに追加してください。 1時間15分ごとに実行するには、次の手順を実行します。
45,30,15,00 * * * * /home/user/downloader.sh >/dev/null 2>&1
開始時間に関係なく15分ごとに実行したい場合:
*/15 * * * * /home/user/downloader.sh >/dev/null 2>&1
説明変数:
PROTOCOL
- 使用するプロトコル。lftp
さまざまな範囲をサポートしています:ftp, ftps, http, https, hftp, fish, sftp
とfile
。 httpsとftpsを使用するには、OpenSSLまたはGNU TLSサポートでコンパイルするにはlftpが必要です。URL
- サーバーの名前またはIP。サーバーが使用しているプロトコルのデフォルトポートを使用していない場合は、最後に:PORT
それを追加することもできます。LOCALDIR
- ファイルの保存場所。REMOTEDIR
- リモートサーバーからファイルをインポートする場所cd
。USER
とPASSWORD
- FTP資格情報。REGEX
- ダウンロードするファイルをフィルタリングする正規表現です。たとえば、特定の拡張子を持つファイルのみをダウンロードしたい場合に便利です。*
すべてをダウンロードするには使用してください。LOG
- ログファイルの場所。
いくつかのコードロジックを説明してください。
1.- もし
if [ ! $? -eq 0 ]; then
fi
この$?
変数は、「最後のコマンドのステータスコード」を意味する特別な bash 変数です。 Bashはコマンドを正常に実行すると常に0を返すので、a -eq
(同じ)と!
aの開始(負)を比較すると、if
実行に問題がないかどうcd
かを確認するのに十分ですlftp
。何が起こっているのかをよりよく記録するには、そのコマンドのマニュアルを参照する必要があります。
2.- ドキュメントはこちら
lftp $PROTOCOL://$URL <<- DOWNLOAD
DOWNLOAD
bashのドキュメントはこちら。これは、「この入力リストを使用してこのコマンドを入力してください」と言う方法です。制限文字列の名前を指定して、との間DOWNLOAD
の<<- DOWNLOAD
すべての内容DOWNLOAD
をに入力しますlftp
。インターネット上のシンボルを含む例を見ることができますが、インデントをサポートしているので、<<
このバージョンを好みます。<<-
三。-lftp コマンド
user $USER "$PASS"
cd $REMOTEDIR
mget -E $REGEX
これは、それぞれログインとパスワードでlftp
ユーザーを認証し、キーワードを使用して何でも変更し、一括ダウンロードすることを示す内部コマンドです。 lftpシェルが開いたら、入力するか、キーを押して学習できます。例:$USER
"$PASS"
$REMOTEDIR
$REGEX
lftp
?
Enter? lftp-command-you-want
Enter
[root@host ~]# lftp
lftp :~> ?
!<shell-command> (commands) alias [<name> [<value>]]
attach [PID] bookmark [SUBCMD] cache [SUBCMD]
cat [-b] <files> cd <rdir> chmod [OPTS] mode file...
close [-a] [re]cls [opts] [path/][pattern] debug [<level>|off] [-o <file>]
du [options] <dirs> exit [<code>|bg] get [OPTS] <rfile> [-o <lfile>]
glob [OPTS] <cmd> <args> help [<cmd>] history -w file|-r file|-c|-l [cnt]
jobs [-v] [<job_no...>] kill all|<job_no> lcd <ldir>
lftp [OPTS] <site> ln [-s] <file1> <file2> ls [<args>]
mget [OPTS] <files> mirror [OPTS] [remote [local]] mkdir [-p] <dirs>
module name [args] more <files> mput [OPTS] <files>
mrm <files> mv <file1> <file2> [re]nlist [<args>]
open [OPTS] <site> pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>]
pwd [-p] queue [OPTS] [<cmd>] quote <cmd>
repeat [OPTS] [delay] [command] rm [-r] [-f] <files> rmdir [-f] <dirs>
scache [<session_no>] set [OPT] [<var> [<val>]] site <site-cmd>
source <file> torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>]
wait [<jobno>] zcat <files> zmore <files>
lftp :~> ? mget
Usage: mget [OPTS] <files>
Gets selected files with expanded wildcards
-c continue, resume transfer
-d create directories the same as in file names and get the
files into them instead of current directory
-E delete remote files after successful transfer
-a use ascii mode (binary is the default)
-O <base> specifies base directory or URL where files should be placed
mget
これが内部的に正しいコマンドであることを知っていることに関する知識は、lftp
以下から来ています。マンページを読む「一括」、「多重」、「一括」などのキーワードを検索すると、ftp(1)
コマンドにはmget
コマンドもあるため、lftp
同等のコマンドがある可能性があります。
マンページ: lftp(1)