进步一点点:给力的相对路径拷贝

进步一点点:给力的相对路径拷贝

 

游戏服务器运行后(操作系统为linux),会在某目录下生成log目录,在log目录下有login_loggameserver_logchar_logmap1_logmap2_logmap3_logmapn_log,每个log目录下有以逻辑服务器运行时的时间戳命名的日志文件,如2010-06-07-09-06-30.log,表示这个逻辑服务器是在201067日上午90630秒启动的,启动后输出的日志保存在这个文件中,直到该逻辑服务器进程结束。

 

因为log文件中记录了游戏帐号或角色的操作,对于程序员调试bug很有帮助,因此程序员常有获取当天游戏服务器的log文件的需求。

 

手工阶段

最初为了给程序员提供日志,在linux某个目录下创建一个临时目录:

$ mkdir ~/temp

再在临时目录下按游戏服务器log目录下各子目录的结构创建子目录:

$ cd ~/temp

$ mkdir login_log gameserver_log char_log map1_log map2_log … mapn_log

然后将程序员需求的游戏服务器log目录下各逻辑服务器的log文件复制到对应的目录中,假设程序员需求201067日服务器运行的log文件,则:

$ cp ~/server/log/login_log/2010-06-07*.log ~/temp/login_log/

$ cp ~/server/log/mapn_log/2010-06-07*.log ~/temp/mapn_log/

然后再将temp目录用scp拷贝至程序员的指定目录中。

 

脚本阶段

经历了这样几次需求后,觉得手动操作的有点多,于是将上述cp部分写成了shell脚本,并使用date +%Y%m%d命令生成当日日期,再创建出按当日日期命名的目录,每次执行shell脚本即可满足需求。

 

实际的游戏服务器运行过程中,map逻辑服务器常增加或删减,因此每当数量有变化时,需要手动地创建目标文件夹并修改脚本,也给工作带来了些不便。

 

给力的参数

有次无意间man cp,发现了cp有个给力的参数:

--parents

use full source file name under DIRECTORY

这个参数可以将文件的相对路径也拷贝过去,自动建立任何缺少的中间目录,如:

$ cp --parents server/log/login_log/2010-06-07*.log ~/20100607

~/20100607必须是一个已存在的目录,那么这个命令的结果是在~/abc/目录下创建server/log/login_log/目录,然后将2010-06-07*.log文件复制到该目录下。因此这个cp --parents命令可结合find命令实现上述多条命令的效果,而且无视逻辑服务器的增删。然后再使用scp将日志文件拷贝给程序员。

 

更加给力的参数

rsync

-R, --relative             

use relative path names

使用相对路径信息

rsync -R结合find命令,连scp命令都省略了。

你可能感兴趣的:(游戏,shell,服务器,脚本,login,2010)