文件树结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 注意以下就是绝对路径/steam └── steam #(用户)根目录 ├── common #饥荒游戏存档服务器相关目录 │ ├── backup #备份文件夹 │ ├── dstsave #存档目录 │ └── dstserver #服务器目录 ├── cron_update_starve.sh #定时更新程序 ├── steamcmd #steamcmd服务目录 │ ├── linux32 │ ├── linux64 │ ├── package │ ├── public │ ├── siteserverui │ ├── steam │ ├── steamcmd_linux.tar.gz │ └── steamcmd.sh #steamcmd启动脚本 ├── update_starve.cmd #更新饥荒服务端命令库 └── update_starve.sh #更新饥荒服务端脚本
定时调度 📌如果想要服务器定期执行一些列动作,就需要一个定时器来指定需要执行的程序脚本
1 2 3 [root@VM-8-6-centos]$ crontab -e # VI中编辑 0 2 * * * /steam/cron_update_starve.sh #每天的凌晨2:00执行一次.sh
定时调度脚本:cron_update_starve.sh中需要装载执行一次饥荒服务器更新时需要的所有动作(指令集)
1 2 3 4 5 6 7 # !/bin/bash # 第一行的 set -e #指定shell脚本的工作模式 /steam/common/dstserver/bin/stop.sh #第一步:执行停机脚本,关闭正在运行的饥荒服务端,避免数据丢失 sleep 5 #休眠5分钟 /steam/update_starve.sh #第二步:执行饥荒服务端的更新脚本 /steam/common/dstserver/bin/start.sh #第三步:执行饥荒服务端的启动脚本
饥荒服务端更新
停机脚本:stop.sh 关闭正在运行的饥荒服务端,避免数据丢失;
1 2 3 4 5 6 7 8 9 10 11 12 # !/bin/bash pids=$(ps aux | grep dontstarve | awk -v OFS=',' '{print $2,$11}') #获取进程的PID array=(${pids// / }) for var in ${array[@]} do item=(${var//,/ }) result=`echo ${item[1]} | grep dontstarve` if [[ "$result" != "" ]] then rs=$(kill -9 ${item[0]}) fi done
更新脚本:update_starve.sh 更新饥荒服务端;
1 2 # !/bin/bash /steam/steamcmd/steamcmd.sh < /steam/update_starve.cmd #将.cmd指令集中的指令重定向到使用SteamCMD命令行打开后执行
1 2 3 4 force_install_dir /steam/common/dstserver login anonymous app_update 343050 validate quit
1 2 3 4 5 6 # !/bin/bash set -e SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $SCRIPT_DIR nohup ./start_master.sh >/dev/null 2>&1 & nohup ./start_cave.sh >/dev/null 2>&1 &