一、序言
坚持码字记录学习心得也是一件不容易的事情,平时虽然工作比较忙,但也只是自己偷懒的一个借口罢了。19年差不多还一个月一篇,今年...只有4篇。难怪感觉自己今年进步不大。2020已经到尾了,我会在2021年坚持多写心得,将自己学到的东西记录下来并分享出来。
最近觉得开发阶段,每次要繁琐的去更新配置文件和上传jar包到linux比较麻烦,所以就百度了下,写了个批处理脚本自用。(游戏的json配置文件放置到项目外,方便游戏期间在线更新配置)
二、安装WinSCP
WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。
使用它最主要是为了使用它的命令,通过批处理脚本一键将要上传的文件更新到服务器上。
我下载的是5.17.9版本。个人感觉版本问题不大,选择任意一个版本就可以了。
三、脚本编写
1.编写脚本文件 upload_to_server.bat
cd D:\software\WinSCP
WinSCP.com /script=C:\Users\zzx\Desktop\PlanH5\farm\excel\upload_detail.bat /log=log.txt
pause
第1行:进入到你WinSCP的安装目录
第2行:指定dos命令程序 WinSCP.com去运行我们的winscp命令的另一个脚本。指定日志文件生成/log = log.txt,没太多意义,如果有报错什么的会在窗口显示的,去掉也行。
2.实际运行脚本文件 upload_detail.bat
open root:password@192.168.1.200:22
cd /mnt/farm_server/extensions/farm/property_config
rm *.json
put C:\Users\zzx\Desktop\PlanH5\farm\excel\out\data\*.json
exit
第1行:打开一个ssh连接,格式: user:password@ip:22
2、3、4行都是执行命令,其中的put 是WinSCP的命令,将你本地windows的目录文件放到刚才cd 到的目录下。
通过这样简单的脚本就可以将我打表过的json文件直接上传到服务器了,不用压缩后再通过xshell丢进去再解压了。(不要问Jenkins,问就是还没有。T T)
四、加强版
那如果我们还想做一些其他的操作呢?或者做一些其他问题的处理?
比如我想在更新到内网的同时,再使用shell脚本更新到外网环境中呢?
如果要在shell脚本中使用scp命令,要先安装expect。
yum -y install expect
编写shell脚本 transfer.sh
#!/usr/bin/expect
spawn scp -r /mnt/farm_server/extensions/farm/property_config root@ip:/tmp
expect "*password:"
send "password\n"
expect eof
必须要用#!/usr/bin/expect 指定在expect环境下,不然运行不了。
spawn:启动新的进程
send:用于向进程发送字符串
expect:从进程接收字符串
执行完第1行后,会通过expect检测收到输入密码的通知,这个时候通过send向进程发送密码,以\n结尾。
expect eof结尾使用。
脚本编写好了怎么通过WinSCP脚本来执行呢 ?
其实有些命令WinSCP并不能直接执行,需要通过关键字call 来修饰执行,比如上面的脚本中就可以通过call 来修饰cp,rm等命令。
在上面的upload_detail.bat脚本中加入:
open root:password@192.168.1.200:22
call cd /mnt/farm_server/extensions/farm/property_config
call rm *.json
put C:\Users\zzx\Desktop\PlanH5\farm\excel\out\data\*.json
call cd /mnt/farm_server
call ./transfer.sh
exit
这样就可以通过远程调用shell脚本来传输文件到其他服务器或是处理一些其他事情了。
五、WinSCP相关命令
WinSCP相关:
call 执行任意远程命令
cd 改变远程工作目录
checksum 计算远端文件的校验码
chmod 改变远程文件权限
close 关闭会话
cp 复制远端文件
echo 将参数显示为消息
exit 关闭所有会话并结束程序
get 从远程目录下载文件到本地目录
help 显示帮助
keepuptodate 在一个远程目录连续反映本地目录的改变
lcd 改变本地工作目录
lls 列出本地目录的内容
ln 新建远程符号链接
lpwd 显示本地工作目录
ls 列出远程目录的内容
mkdir 新建远程目录
mv 移动或者重命名远程文件
open 连接到服务器
option 设置或显示脚本选项的值
put 从本地目录上传文件到远程目录
pwd 显示远程工作目录
rm 删除远程文件
rmdir 删除远程目录
session 列出连接的会话或者选择活动会话
stat 获取远程文件属性
synchronize 用一个本地目录同步远程目录
如果有其他需求可以使用这些命令,但是我感觉有一个call就够了。。。。
2020年就要结束了,希望自己能在明年更上一层楼。
加油!
脚本及安装包已经上传到GitHub,
地址:https://github.com/zhuangzhen...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。