start.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #!/bin/bash
  2. set -e # 遇到错误时退出
  3. echo "=========================================="
  4. echo "SteamCMD容器启动中..."
  5. echo "时间: $(date)"
  6. echo "=========================================="
  7. copy_files() {
  8. local mod_path=$1
  9. local parent_path=$2
  10. local lower_addons_path="${mod_path}/addons"
  11. local upper_addons_path="${mod_path}/Addons"
  12. local lower_keys_path="${mod_path}/keys"
  13. local upper_keys_path="${mod_path}/Keys"
  14. # 处理addons目录
  15. if [ -d "$lower_addons_path" ]; then
  16. find "$lower_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
  17. elif [ -d "$upper_addons_path" ]; then
  18. find "$upper_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
  19. fi
  20. # 处理keys目录
  21. if [ -d "$lower_keys_path" ]; then
  22. find "$lower_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
  23. elif [ -d "$upper_keys_path" ]; then
  24. find "$upper_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
  25. fi
  26. }
  27. start_dayzserver() {
  28. cd /root/Steam/steamapps/common/DayZServer
  29. # 初始化mod变量
  30. client_mods=""
  31. server_mods=""
  32. while IFS= read -r -d $'\0' folder; do
  33. echo "处理客户端mod: $folder"
  34. copy_files "$folder" "."
  35. if [ -n "$client_mods" ]; then
  36. client_mods="${client_mods};"
  37. fi
  38. client_mods="${client_mods}${folder}"
  39. done < <(find "./client_mod" -type d -name '@*' -print0)
  40. while IFS= read -r -d $'\0' folder; do
  41. echo "处理服务端mod: $folder"
  42. copy_files "$folder" "."
  43. if [ -n "$server_mods" ]; then
  44. server_mods="${server_mods};"
  45. fi
  46. server_mods="${server_mods}${folder}"
  47. done < <(find "./server_mod" -type d -name '@*' -print0)
  48. # 崩溃检测和自动重启循环
  49. while true; do
  50. echo "=========================================="
  51. echo "启动DayZServer..."
  52. echo "时间: $(date)"
  53. echo "端口: ${DAYZ_SERVER_PORT}"
  54. echo "CPU核心数: ${DAYZ_CPU_COUNT}"
  55. echo "客户端mod: ${client_mods}"
  56. echo "服务端mod: ${server_mods}"
  57. echo "=========================================="
  58. 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}"
  59. # 启动DayZServer并捕获退出状态
  60. ./DayZServer -port=${DAYZ_SERVER_PORT} -cpuCount=${DAYZ_CPU_COUNT} \
  61. "-config=serverDZ.cfg" "-profiles=profiles" \
  62. "-mission=./mpmissions/${DAYZ_MISSIONS}" \
  63. "-mod=${client_mods}" "-servermod=${server_mods}" &
  64. # 保存进程ID
  65. DAYZ_PID=$!
  66. echo "DayZServer进程ID: $DAYZ_PID"
  67. # 等待进程结束
  68. wait $DAYZ_PID
  69. EXIT_CODE=$?
  70. echo "=========================================="
  71. echo "DayZServer已退出"
  72. echo "退出代码: $EXIT_CODE"
  73. echo "时间: $(date)"
  74. echo "=========================================="
  75. # 检查是否正常退出(退出代码0通常表示正常退出)
  76. if [ $EXIT_CODE -eq 0 ]; then
  77. echo "DayZServer正常退出,将在5秒后重启..."
  78. sleep 5
  79. echo "重新启动DayZServer..."
  80. else
  81. echo "DayZServer异常退出,将在5秒后重启..."
  82. sleep 5
  83. echo "重新启动DayZServer..."
  84. fi
  85. done
  86. }
  87. # 检查并安装SteamCMD
  88. if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
  89. echo "SteamCMD未安装,开始下载和安装..."
  90. echo "下载SteamCMD..."
  91. wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
  92. echo "解压SteamCMD..."
  93. tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
  94. echo "清理临时文件..."
  95. rm /opt/steamcmd/steamcmd_linux.tar.gz
  96. echo "设置执行权限..."
  97. chmod +x /opt/steamcmd/steamcmd.sh
  98. echo "SteamCMD安装完成!"
  99. else
  100. echo "SteamCMD已存在,跳过安装"
  101. fi
  102. if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
  103. echo "DayZServer未安装,开始安装..."
  104. bash /opt/install_dayz.sh
  105. else
  106. echo "DayZServer已安装,检查更新"
  107. # 切换到SteamCMD目录
  108. cd /opt/steamcmd
  109. ./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +app_update 223350 validate +quit
  110. echo "启动DayZServer..."
  111. cd /root/Steam/steamapps/common/DayZServer
  112. start_dayzserver
  113. fi