ソースを参照

update: 添加自动更新mod脚本

Dcrclub 1 ヶ月 前
コミット
a5fea9ccae
4 ファイル変更62 行追加16 行削除
  1. 4 0
      DockerFile/Dockerfile
  2. 36 0
      DockerFile/start.sh
  3. 20 16
      DockerFile/updatemod.sh
  4. 2 0
      docker-compose.yml

+ 4 - 0
DockerFile/Dockerfile

@@ -18,6 +18,7 @@ RUN apt-get update && apt-get install -y \
     libtinfo5 \
     libvorbisfile3 \
     lib32z1 \
+    cron \
     && rm -rf /var/lib/apt/lists/*
 
 RUN mkdir -p ${STEAMCMD_DIR}
@@ -38,6 +39,9 @@ RUN chown -R steam:steam ${STEAMCMD_DIR} && \
     chown steam:steam /opt/updatemod.sh && \
     chown -R steam:steam /opt/games
 
+# 创建crontab配置文件
+RUN echo "*/15 * * * * /opt/updatemod.sh >> /var/log/updatemod.log 2>&1" > /etc/cron.d/updatemod
+
 WORKDIR ${STEAMCMD_DIR}
 
 CMD ["/opt/start.sh"] 

+ 36 - 0
DockerFile/start.sh

@@ -7,6 +7,39 @@ echo "SteamCMD容器启动中..."
 echo "时间: $(date)"
 echo "=========================================="
 
+# 启动cron服务并设置crontab任务
+setup_crontab() {
+    # 检查是否启用自动更新
+    if [ "${ENABLE_AUTO_UPDATE:-true}" != "true" ]; then
+        echo "自动更新已禁用 (ENABLE_AUTO_UPDATE=false)"
+        return
+    fi
+    
+    echo "设置crontab自动更新任务..."
+    
+    # 启动cron服务
+    service cron start
+    
+    # 创建日志目录
+    mkdir -p /var/log
+    touch /var/log/updatemod.log
+    chmod 666 /var/log/updatemod.log
+    
+    # 获取更新间隔(默认15分钟)
+    local interval="${UPDATE_INTERVAL:-15}"
+    
+    # 设置crontab任务
+    echo "*/$interval * * * * /opt/updatemod.sh >> /var/log/updatemod.log 2>&1" | crontab -
+    
+    # 验证crontab任务
+    echo "当前crontab任务列表:"
+    crontab -l
+    
+    echo "crontab自动更新任务设置完成!"
+    echo "任务将每${interval}分钟自动运行一次 /opt/updatemod.sh"
+    echo "日志文件位置: /var/log/updatemod.log"
+}
+
 copy_files() {
     local mod_path=$1
     local parent_path=$2
@@ -147,6 +180,9 @@ else
     echo "SteamCMD已存在,跳过安装"
 fi
 
+# 设置crontab自动更新任务
+setup_crontab
+
 if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
     echo "DayZServer未安装,开始安装..."
     bash /opt/install_dayz.sh

+ 20 - 16
DockerFile/updatemod.sh

@@ -2,17 +2,21 @@
 
 # DayZ Mod更新脚本
 # 使用方法: docker compose run --rm steamcmd updatemod
+# 或通过crontab自动运行(每15分钟)
 
 set -e
 
-echo "=========================================="
-echo "开始更新DayZ Mod..."
-echo "时间: $(date)"
-echo "=========================================="
+# 设置日志文件路径
+LOG_FILE="/var/log/updatemod.log"
+
+echo "==========================================" >> "$LOG_FILE"
+echo "开始更新DayZ Mod..." >> "$LOG_FILE"
+echo "时间: $(date)" >> "$LOG_FILE"
+echo "==========================================" >> "$LOG_FILE"
 
 # 检查环境变量
 if [ -z "$STEAM_USERNAME" ] || [ -z "$STEAM_PASSWORD" ]; then
-    echo "错误: 请设置 STEAM_USERNAME 和 STEAM_PASSWORD 环境变量"
+    echo "错误: 请设置 STEAM_USERNAME 和 STEAM_PASSWORD 环境变量" >> "$LOG_FILE"
     exit 1
 fi
 
@@ -21,34 +25,34 @@ cd /opt/steamcmd
 
 # 检查SteamCMD是否已安装
 if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
-    echo "SteamCMD未安装,开始下载和安装..."
+    echo "SteamCMD未安装,开始下载和安装..." >> "$LOG_FILE"
     wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
     tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
     rm /opt/steamcmd/steamcmd_linux.tar.gz
     chmod +x /opt/steamcmd/steamcmd.sh
-    echo "SteamCMD安装完成!"
+    echo "SteamCMD安装完成!" >> "$LOG_FILE"
 fi
 
 # 更新Mod(如果有配置的话)
 if [ -n "$MOD_IDS" ]; then
-    echo "开始更新Mod..."
+    echo "开始更新Mod..." >> "$LOG_FILE"
     IFS=',' read -ra MOD_ARRAY <<< "$MOD_IDS"
     
     for mod_id in "${MOD_ARRAY[@]}"; do
-        echo "更新Mod ID: $mod_id"
+        echo "更新Mod ID: $mod_id" >> "$LOG_FILE"
         ./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +workshop_download_item 221100 $mod_id +quit
         
         if [ $? -eq 0 ]; then
-            echo "Mod $mod_id 更新完成"
+            echo "Mod $mod_id 更新完成" >> "$LOG_FILE"
         else
-            echo "Mod $mod_id 更新失败"
+            echo "Mod $mod_id 更新失败" >> "$LOG_FILE"
         fi
     done
 else
-    echo "未配置Mod ID,跳过Mod更新"
+    echo "未配置Mod ID,跳过Mod更新" >> "$LOG_FILE"
 fi
 
-echo "=========================================="
-echo "Mod更新完成!"
-echo "时间: $(date)"
-echo "==========================================" 
+echo "==========================================" >> "$LOG_FILE"
+echo "Mod更新完成!" >> "$LOG_FILE"
+echo "时间: $(date)" >> "$LOG_FILE"
+echo "==========================================" >> "$LOG_FILE" 

+ 2 - 0
docker-compose.yml

@@ -18,6 +18,8 @@ services:
       - DAYZ_MISSIONS=dayzOffline.chernarusplus
       - DAYZ_SERVER_PORT=2302
       - DAYZ_CPU_COUNT=4
+      - ENABLE_AUTO_UPDATE=${ENABLE_AUTO_UPDATE:-true}
+      - UPDATE_INTERVAL=${UPDATE_INTERVAL:-15}
     ports:
       - "2302:2302/udp"
       - "2305:2305/udp"