背景
我在闲置的台式机上搭建了饥荒管理后台,该后台能够自动维护一个饥荒服务器,并支持服务器的存档、回档、配置、更新。
详见之前的一篇博客。
问题描述
之前在客户端上登陆饥荒服务器的时候经常会遇到“服务器正在运行旧版本模组…”的问题,截图如下。
但是问题的原因不明,导致一起玩的小伙伴被这个错误卡住,进不了我们的服务器。
问题模组定位
在提示服务器正在运行旧版本模组时,打开客户端日志。
路径为:文档\Klei\DoNotStarveTogether\client_log.txt
搜索“!!!”,能够定位到出现版本问题的模组:
从日志中能够看出,出问题的模组是“木牌传送”(编号是2119742489)。它在Steam Workshop中的最新版本是2.09,但是当前服务器上的版本是2.08,服务器上的模组版本确实旧了。
服务器模组更新
解决以上问题,需要更新模组。但是所用的饥荒管理后台是有自动更新模组功能的,为什么模组没有被更新呢?
通过向日葵远程到服务器所在的台式机,饥荒管理后台的目录是这样的:
mods文件夹下有模组。但是那些模组不是当前服务器在使用的模组,用途不明。mods文件夹下的dedicated_server_mods_setup.lua文件倒是列举了服务器当前使用的模组编号。
当前使用的模组在ugc_mods里。我尝试在ugc_mods里把2119742489删掉,然后开启服务器,就从饥荒后台的 系统设置-地面程序运行日志 里观察到了后台尝试自动下载缺失的2119742489模组。但是下载似乎总是重试。我觉得问题出在服务器的网络配置上。
可是服务器的网络一直挂着梯子,我也试着在命令行里执行curl www.google.com
,访问外网是没有问题的。
最后我突然想到,这个饥荒后台已经连续运行很多天了,前一段时间我太忙了,都不记得这次饥荒后台是什么时候启动的了。我看到大部分模组甚至编辑的时间都是2024年4月份的,而这次版本落后的2119742489的编辑时间是2024年7月份。隐约记得几个月前饥荒服务器也有模组过旧的问题,当时我是在本地配好模组,然后直接上传整个存档解决问题的,估计那次就是7月份左右。
所以这个2119742489模组的编辑日期就是上一次上传存档到饥荒后台的时候,那次就没有根本解决问题。饥荒后台也是一直开着,一直不具备更新模组的能力。
既然如此,我猜测饥荒后台使用网络代理设定是它启动时的设定。当时阴差阳错,没有开启命令行的http代理,导致此后运行的饥荒后台一直不具有访问外网的能力!
问题解决
于是,我开了梯子,也设好命令行代理,确保从命令行能访问谷歌。然后我重启饥荒管理后台(注意这里不是重启饥荒服务器),这样新的饥荒管理后台一定能使用命令行代理,也就能访问外网更新模组了。
重启管理后台之后,在后台中开启饥荒服务器,我从地面程序运行日志里再次观察到了下载2119742489模组的动作。这次再去看ugc_mods文件夹,就能看到编辑日期为当前时间的2119742489文件了。问题解决。
问题存在的时候是一伙人,问题被解决的时候已经换了一伙人。但是当时就是没有时间精力来排查真实的原因,或许当时就该排查不出来吧。
脑子里就剩下“斯人已乘黄鹤去,此地空余黄鹤楼。”