linux定时上传本地文件到ftp服务器shell脚本

linux定时上传本地文件到ftp服务器shell脚本

由于项目需求,需要写一个shell脚本,上传本地文件到ftp服务器,并生成定时任务,每天都运行一次脚本,这脚本花了我2天时间…(组长对我说写不出来我帮你写…原谅我太渣),第一次写shell脚本,记录一下。

首先解释一下shell脚本:脚本文件其实就是把你在linux下敲击的命令都放在.sh脚本里面,然后去运行这个脚本,比如你要创建一个文件,然后压缩,然后删除源文件,用linux命令的话你需要一步一步敲击如下三个命令:
touch test.txt
zip /root/test.zip test.txt
rm -f test.txt
使用shell脚本的话,你只需要把这三个命令都放在脚本里,然后执行脚本,就不用一次一次敲击命令,方便很多。

再啰嗦一下:一定要搞清楚自己的需求,随便去网上搜一个脚本的话大部分是无法满足自己的需求的,因为需求不一样(我就吃了这个亏),你可以多去看一下别人的脚本是如何写的,学习如何写脚本。

我的项目需求:把本机上面的四个业务的日志文件,压缩成zip包,上传到ftp服务器,ftp目录结构要求:每个月的日志放在一个文件夹下,文件夹命名规则为:年月,如201902,然后每天的日志压缩包命名规则为:年月日_主机名,如20190227_hostname1.zip(解压后为20190227.log),结构如下:

  • live
    • 201902
      • 20190227
        • 20190227_hostname1.zip
        • 20190227_hostname2.zip
      • 20190228
        • 20190228_hostname1.zip
        • 20190228_hostname2.zip
    • 201903

因为分布式部署,所以每天的日志压缩包名字加上主机名字。

废话不多说,先抛出我这次上传文件用的shell脚本:

#!/bin/bash
#主机名
hostname=$HOSTNAME 
#本机log文件目录
live_dir="/logs/live"

#先 生成zip文件
#因为本机的日志文件名字跟要上传到ftp服务器的文件名不一样 所以在此做一下转换
oldfile=$(date -d "-1 day" +%Y-%m-%d)
newfile=$(date -d "-1 day" +%Y%m%d)
livefile=$newfile"_"$hostname

#要求上传的文件为zip包,在此做压缩
if [ -d $live_dir ];then
        cd $live_dir
        cp $oldfile.log $livefile.log
        zip $livefile.zip $livefile.log
        rm -rf $livefile.log
fi

#远程服务器目录按年月日生成目录,共有三级
#一级目录:
zhibodir=live
#二级目录:201902
seconddir=$(date -d "-1 day" +%Y%m)
#三级目录:20190228
thirddir=$(date -d "-1 day" +%Y%m%d)
#连接ftp服务器
ftp -v -n 132.128.202.203<<EOF
user root 111111
binary
hash
#判断服务器上的目录是否存在
if [ ! -d $zhibodir];then
    mkdir $zhibodir
fi
cd $zhibodir
if [ ! -d $seconddir];then
    mkdir $seconddir
fi
cd $seconddir
if [ ! -d $thirddir];then
    mkdir $thirddir
fi
cd $thirddir
#切换到本机log目录
lcd $live_dir
prompt off
mput $livefile.zip
close
bye
EOF      

脚本就这么多,你要是用的话注意目录修改和服务器地址修改。我再说一遍,不要直接用,可以参照怎么写的,有问题可以留言。

再多说一句:如果脚本执行报错ftp命令找不到之类的,注意以下问题(我遇到过):
1、是不是用户没有操作ftp的权限
2、服务器是否安转ftp客户端
3、使用root用户操作的话,要看看root用户是否有操作ftp权限

关于linux操作ftp的命令可以看:
链接: linux下操作ftp的相关命令.

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值