首次提交
This commit is contained in:
132
DockerFile/start.sh
Normal file
132
DockerFile/start.sh
Normal 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
|
||||
Reference in New Issue
Block a user