매 x 시간마다 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)