diff --git a/DockerFile/Dockerfile b/DockerFile/Dockerfile index faa6c54..e503aaf 100644 --- a/DockerFile/Dockerfile +++ b/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"] \ No newline at end of file diff --git a/DockerFile/start.sh b/DockerFile/start.sh index 2696fdf..6a9ae0e 100644 --- a/DockerFile/start.sh +++ b/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 diff --git a/DockerFile/updatemod.sh b/DockerFile/updatemod.sh index d74e141..913f980 100644 --- a/DockerFile/updatemod.sh +++ b/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 "==========================================" \ No newline at end of file +echo "==========================================" >> "$LOG_FILE" +echo "Mod更新完成!" >> "$LOG_FILE" +echo "时间: $(date)" >> "$LOG_FILE" +echo "==========================================" >> "$LOG_FILE" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2ef031c..14347b8 100644 --- a/docker-compose.yml +++ b/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"