1.描述
从远程ftp服务器上获取压缩包,下载到本地linux并解压文件
脚本输入一个日期,获取ftp上的 日期.tar.gz 压缩包,并解压到制定目录;或者脚本不使用传入参数,直接在脚本中使用 date +%F 获取当天的日期使用,T+1的话日期自己变化;这里就输入一个参数
如果是循环获取文件,写一个集合把文件名全放进去,然后for i in这个集合,执行shell里的download函数下载文件,只需要对应修改一下即可。
2.修改连接信息,直接使用
#!/bin/bash
# FTP连接信息
FTP_USER="ftptest1" #ftp 用户
FTP_PASSWORD="Aa222222" #用户密码
FTP_HOST="192.168.80.123" #ftp 服务器地址
FTP_REMOTE_DIR="ftp" #下载的包在那个目录下? 登进ftp会默认在ftp根目录/下(不是服务器 / )
# 定义目录信息
LOCAL_DIR="/home/exec/package" #下载压缩包的地址 本地
UNZIP_LOCAL_DIR="/home/exec/unzip" #解压压缩包的地址
#目录是否存在
if [ ! -d "$LOCAL_DIR" ]; then
mkdir -p $LOCAL_DIR
fi
if [ ! -d "$UNZIP_LOCAL_DIR" ]; then
mkdir -p $UNZIP_LOCAL_DIR
fi
#判断输入参数是否为日期YYYYMMDD 指定格式(略)
#或者直接 $(date +%F) 获取当天或者T+1 上一天的日期
IN_DATE=$1
FTP_FILE=${IN_DATE}.tar.gz
#FTP下载压缩包到指定目录
function download_targz() {
echo "Downloading $FTP_FILE ..."
if ! ftp -n $FTP_HOST <<EOF
quote USER $FTP_USER
quote PASS $FTP_PASSWORD
binary
cd $FTP_REMOTE_DIR
lcd $LOCAL_DIR
get $FTP_FILE
quit
EOF
then
echo "Failed to download $FTP_FILE"
exit 1
fi
}
# 解压下载的tar到指定目录(已测试)
function extract_file() {
echo "Extracting $FTP_FILE ..."
if ! tar -xzf $LOCAL_DIR/$FTP_FILE -C $UNZIP_LOCAL_DIR; then
echo "Failed to extract $FTP_FILE"
exit 1
fi
}
#下载
down_result=$(download_targz)
#增加一个判断,如果要下载的包不存在,那么报错
if [[ $(echo $down_result |grep -c -E -i 'failed|error') -ne 0 ]];then
echo "download $FTP_FILE error "
exit 1
else
echo "download $FTP_FILE ok "
fi
#解压
extract_result=$(extract_file)
#增加一个判断,如果加压过程出现error等错误,也算报错
if [[ $(echo $extract_result |grep -c -E -i 'failed|error') -ne 0 ]];then
echo "extract $FTP_FILE error "
exit 1
else
echo "extract $FTP_FILE ok "
fi
3.调用显示
4.通过crontab配置定时任务
格式
* * * * * command
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
输入参数的适合手动执行,改成直接获取当天的日期
通过crontab -e配置 ,因为是测试就改成5分钟执行一次脚本,自行配置,如果全部删除可以用crontab -r,查看信息使用crontab -e
如果手动执行脚本正常显示,但是放到定时任务里就不执行 ,那么可能是环境变量没有,在脚本最前面增加一行source /etc/profile 或者使用用户的环境变量 source ~/.bash_profile
注意命令是全路径
查看显示
仅供参考修改,主要还是注意自己的文件是什么样的,再修改