进步一点点:给力的相对路径拷贝
游戏服务器运行后(操作系统为linux),会在某目录下生成log目录,在log目录下有login_log、gameserver_log、char_log、map1_log、map2_log、map3_log、…、mapn_log,每个log目录下有以逻辑服务器运行时的时间戳命名的日志文件,如2010-06-07-09-06-30.log,表示这个逻辑服务器是在2010年6月7日上午9点06分30秒启动的,启动后输出的日志保存在这个文件中,直到该逻辑服务器进程结束。
因为log文件中记录了游戏帐号或角色的操作,对于程序员调试bug很有帮助,因此程序员常有获取当天游戏服务器的log文件的需求。
手工阶段
最初为了给程序员提供日志,在linux某个目录下创建一个临时目录:
$ mkdir ~/temp
再在临时目录下按游戏服务器log目录下各子目录的结构创建子目录:
$ cd ~/temp
$ mkdir login_log gameserver_log char_log map1_log map2_log … mapn_log
然后将程序员需求的游戏服务器log目录下各逻辑服务器的log文件复制到对应的目录中,假设程序员需求2010年6月7日服务器运行的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命令都省略了。