首次提交

This commit is contained in:
Dcr
2025-07-22 17:58:34 +08:00
commit 9f993b7793
8 changed files with 833 additions and 0 deletions

132
DockerFile/start.sh Normal file
View File

@@ -0,0 +1,132 @@
#!/bin/bash
set -e # 遇到错误时退出
echo "=========================================="
echo "SteamCMD容器启动中..."
echo "时间: $(date)"
echo "=========================================="
copy_files() {
local mod_path=$1
local parent_path=$2
local lower_addons_path="${mod_path}/addons"
local upper_addons_path="${mod_path}/Addons"
local lower_keys_path="${mod_path}/keys"
local upper_keys_path="${mod_path}/Keys"
# 处理addons目录
if [ -d "$lower_addons_path" ]; then
find "$lower_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
elif [ -d "$upper_addons_path" ]; then
find "$upper_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
fi
# 处理keys目录
if [ -d "$lower_keys_path" ]; then
find "$lower_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
elif [ -d "$upper_keys_path" ]; then
find "$upper_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
fi
}
start_dayzserver() {
cd /root/Steam/steamapps/common/DayZServer
# 初始化mod变量
client_mods=""
server_mods=""
while IFS= read -r -d $'\0' folder; do
echo "处理客户端mod: $folder"
copy_files "$folder" "."
if [ -n "$client_mods" ]; then
client_mods="${client_mods};"
fi
client_mods="${client_mods}${folder}"
done < <(find "./client_mod" -type d -name '@*' -print0)
while IFS= read -r -d $'\0' folder; do
echo "处理服务端mod: $folder"
copy_files "$folder" "."
if [ -n "$server_mods" ]; then
server_mods="${server_mods};"
fi
server_mods="${server_mods}${folder}"
done < <(find "./server_mod" -type d -name '@*' -print0)
# 崩溃检测和自动重启循环
while true; do
echo "=========================================="
echo "启动DayZServer..."
echo "时间: $(date)"
echo "端口: ${DAYZ_SERVER_PORT}"
echo "CPU核心数: ${DAYZ_CPU_COUNT}"
echo "客户端mod: ${client_mods}"
echo "服务端mod: ${server_mods}"
echo "=========================================="
echo "执行命令: ./DayZServer -port=${DAYZ_SERVER_PORT} -cpuCount=${DAYZ_CPU_COUNT} -config=serverDZ.cfg -profiles=profiles -mission=./mpmissions/${DAYZ_MISSIONS} -mod=${client_mods} -servermod=${server_mods}"
# 启动DayZServer并捕获退出状态
./DayZServer -port=${DAYZ_SERVER_PORT} -cpuCount=${DAYZ_CPU_COUNT} \
"-config=serverDZ.cfg" "-profiles=profiles" \
"-mission=./mpmissions/${DAYZ_MISSIONS}" \
"-mod=${client_mods}" "-servermod=${server_mods}" &
# 保存进程ID
DAYZ_PID=$!
echo "DayZServer进程ID: $DAYZ_PID"
# 等待进程结束
wait $DAYZ_PID
EXIT_CODE=$?
echo "=========================================="
echo "DayZServer已退出"
echo "退出代码: $EXIT_CODE"
echo "时间: $(date)"
echo "=========================================="
# 检查是否正常退出退出代码0通常表示正常退出
if [ $EXIT_CODE -eq 0 ]; then
echo "DayZServer正常退出将在5秒后重启..."
sleep 5
echo "重新启动DayZServer..."
else
echo "DayZServer异常退出将在5秒后重启..."
sleep 5
echo "重新启动DayZServer..."
fi
done
}
# 检查并安装SteamCMD
if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
echo "SteamCMD未安装开始下载和安装..."
echo "下载SteamCMD..."
wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
echo "解压SteamCMD..."
tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
echo "清理临时文件..."
rm /opt/steamcmd/steamcmd_linux.tar.gz
echo "设置执行权限..."
chmod +x /opt/steamcmd/steamcmd.sh
echo "SteamCMD安装完成"
else
echo "SteamCMD已存在跳过安装"
fi
if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
echo "DayZServer未安装开始安装..."
bash /opt/install_dayz.sh
else
echo "DayZServer已安装检查更新"
# 切换到SteamCMD目录
cd /opt/steamcmd
./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +app_update 223350 validate +quit
echo "启动DayZServer..."
cd /root/Steam/steamapps/common/DayZServer
start_dayzserver
fi