无人值守使用FTP传送项目文件
各种IT项目在开发末期都会使用各种方式将项目文件从开发环境转移到部署环境。这个过程可能会使用各种方式,包括远程文件拷贝比如FTP、SCP等等,或者直接通过U盘等存储介质到现场部署。小型项目的部署以FTP最为常见,但是FTP由于其历史的久远性使得其不支持很多现代的功能,其中最重要的就包括上传文件夹。
另外一个问题在于,当需要传输的文件很大时,不可能一直打开本地shell等传输完成再关闭。最好有能让程序在账号登出后继续运行的方式。
本文提供这两个问题的解决办法。
应用情景:远程通过ssh登上开发服务器,通过FTP将文件直接拷上部署服务器。上传命令发送后登出。期间不时登录查看当前进度,直到传输完成。
用到的命令:
lftp
lftp是个高级的FTP程序,功能上有点类似windows下的各种FTP客户端,这里用到的是它的文件夹上传功能。进入lftp之后,敲入以下命令:
mirror -R <本地文件夹名>
mirror是用来下载远程文件夹到本地的,加上-R参数后的意思是“反转”(Reverse),最后的结果就是本地文件夹被上传到远端。
screen
这个程序广泛用于将程序放到后台运行。敲入:
screen
就打开了一个新的“虚拟终端”。这个“虚拟终端”可以随时拔掉(detach)和接上(attach)。拔掉之后里面的程序仍然会继续运行。
在这个终端里运行一些程序之后按Ctrl+A, Ctrl+D,这样就可以把“虚拟终端”拔掉,回到原来的shell。之后运行
screen -DDR
就可以连接到最后一个被拔掉的虚拟终端。使用:
screen -l
可以列出所有存在的虚拟终端。另外还有一个参数可以指定连接到哪个已存在的虚拟终端,但是我忘了。。所以查看man吧。
实例:
ssh上服务器后
screen
lftp
<打开FTP服务器>
mirror -R <本地文件夹名>
Ctrl+A, Ctrl+D
exit
这样任务继续运行,但是ssh连接已经关闭。
要查看:
ssh连接
screen -DDR
然后可以Ctrl+A Ctrl+D脱开,然后exit
让机器自动做事的感觉很好。XD