饥荒联机版Centos下自动更新教程

  1. 饥荒联机版Centos下自动更新教程
  2. 引言
  3. 开服
  4. 脚本配置
  5. 启动定时更新

饥荒联机版Centos下自动更新教程

  • 引言
  • 开服
  • 脚本配置
  • 启动定时更新

引言

众所周知,饥荒经常会出现服务器版本与线上版本不一致导致服务器列表上没法找到自己的服务器,这时候往往需要腐竹登录服务器并手动更新重启进程,增加了维护成本,因此这里写一个能够帮助腐竹解放双手,实现服务器自动更新的教程,方便大家更好地玩耍。


开服

开服教程有很多,此处本人也不叙述了,可以去别的blog里面看看大家是怎么写的,这里主要是想讲一下接下来要用到的一些文件位置

steam路径: ~/steamcmd(该目录下有steamcmd.sh脚本,如果你的脚本不在该路径下请自行修正)饥荒路径: ~/dst(该目录下有bin/dontstarve_dedicated_server_nullrenderer程序,如果对应不上也请自行修正)

脚本配置

在~/目录下新建get_dst_ver.py,并粘贴下面的代码到py中

# -*- coding:utf-8 -*-
import gzip
import re
import http.cookiejar
import urllib.request
import urllib.parse

def get_version():
    def ungzip(data):
        return gzip.decompress(data)

    def getOpener(head):
        # deal with coookie
        cj = http.cookiejar.CookieJar()
        pro = urllib.request.HTTPCookieProcessor(cj)
        opener = urllib.request.build_opener(pro)
        header = []
        for key, value in head.items():
            elem = (key, value)
            header.append(elem)
        opener.addheaders = header
        return opener

    header = {
        'Connection': 'Keep-Alive',
        'Accept': 'text/html, application/xhtml+xml, */*',
        'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
        'Accept-Encoding': 'gzip, deflate',
        'DNT': '1'
    }
    url = '<https://forums.kleientertainment.com/game-updates/dst/>'
    opener = getOpener(header)
    data = opener.open(url).read()
    data = ungzip(data)
    # print(data)
    temp = re.compile('<a href=\\'<https://forums.kleientertainment.com/game-updates/dst/(.*?)-r\\d>', re.S)
    ver_list = []
    try:
        for x in temp.findall(data.decode()):
            ver_list.append(x)
    except IndexError:
        return -1
    # print(str(x))
    ver_list.sort(reverse=True)
    return ver_list[0]

print(get_version())

在~/目录下新建get_dst_ver.sh,并粘贴下面的代码到sh中

new_ver=`/usr/bin/python3 ~/get_dst_ver.py`
now_ver=`cat ~/dst/version.txt`
pid_num=`ps -ef | grep "dst" | grep -v grep | awk '{print $2}' | wc -l`


if [ $new_ver != $now_ver ] || [ $pid_num -lt 2 ]; then
        echo 'now version: '$now_ver 'new_ver:' $new_ver >> ver_update.log
        cd ~/steamcmd/ #(上述的steam路径)
        ./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
        cd ~/dst/bin #(上述的饥荒路径)
        pkill -9 -e -f dst >> ver_update.log
        pkill -9 -e -f dont >> ver_update.log
        sh dst_overworld.sh > dst_overworld.log & #(启动世界的命令,没有该sh的话请用./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master)
        sh dst_caves.sh > dst_caves.log & #(启动洞穴的命令,没有该sh的话请用./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves)
fi

启动定时更新

这时候只需要启动linux自带的定时任务即可,命令如下

chmod 777 ~/get_dst_ver.sh # 给脚本执行权限
crontab -e # 进入编辑界面,然后按i进入编辑模式
* * * * * sh ~/get_dst_ver.sh #粘贴这行到编辑界面里,然后按ESC退出编辑模式,然后输入 :wq(冒号也要,注意是英文)保存并退出即可


欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//