update: 添加自动更新mod脚本
This commit is contained in:
@@ -18,6 +18,7 @@ RUN apt-get update && apt-get install -y \
|
|||||||
libtinfo5 \
|
libtinfo5 \
|
||||||
libvorbisfile3 \
|
libvorbisfile3 \
|
||||||
lib32z1 \
|
lib32z1 \
|
||||||
|
cron \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN mkdir -p ${STEAMCMD_DIR}
|
RUN mkdir -p ${STEAMCMD_DIR}
|
||||||
@@ -38,6 +39,9 @@ RUN chown -R steam:steam ${STEAMCMD_DIR} && \
|
|||||||
chown steam:steam /opt/updatemod.sh && \
|
chown steam:steam /opt/updatemod.sh && \
|
||||||
chown -R steam:steam /opt/games
|
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}
|
WORKDIR ${STEAMCMD_DIR}
|
||||||
|
|
||||||
CMD ["/opt/start.sh"]
|
CMD ["/opt/start.sh"]
|
||||||
@@ -7,6 +7,39 @@ echo "SteamCMD容器启动中..."
|
|||||||
echo "时间: $(date)"
|
echo "时间: $(date)"
|
||||||
echo "=========================================="
|
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() {
|
copy_files() {
|
||||||
local mod_path=$1
|
local mod_path=$1
|
||||||
local parent_path=$2
|
local parent_path=$2
|
||||||
@@ -147,6 +180,9 @@ else
|
|||||||
echo "SteamCMD已存在,跳过安装"
|
echo "SteamCMD已存在,跳过安装"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 设置crontab自动更新任务
|
||||||
|
setup_crontab
|
||||||
|
|
||||||
if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
|
if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
|
||||||
echo "DayZServer未安装,开始安装..."
|
echo "DayZServer未安装,开始安装..."
|
||||||
bash /opt/install_dayz.sh
|
bash /opt/install_dayz.sh
|
||||||
|
|||||||
@@ -2,17 +2,21 @@
|
|||||||
|
|
||||||
# DayZ Mod更新脚本
|
# DayZ Mod更新脚本
|
||||||
# 使用方法: docker compose run --rm steamcmd updatemod
|
# 使用方法: docker compose run --rm steamcmd updatemod
|
||||||
|
# 或通过crontab自动运行(每15分钟)
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "=========================================="
|
# 设置日志文件路径
|
||||||
echo "开始更新DayZ Mod..."
|
LOG_FILE="/var/log/updatemod.log"
|
||||||
echo "时间: $(date)"
|
|
||||||
echo "=========================================="
|
echo "==========================================" >> "$LOG_FILE"
|
||||||
|
echo "开始更新DayZ Mod..." >> "$LOG_FILE"
|
||||||
|
echo "时间: $(date)" >> "$LOG_FILE"
|
||||||
|
echo "==========================================" >> "$LOG_FILE"
|
||||||
|
|
||||||
# 检查环境变量
|
# 检查环境变量
|
||||||
if [ -z "$STEAM_USERNAME" ] || [ -z "$STEAM_PASSWORD" ]; then
|
if [ -z "$STEAM_USERNAME" ] || [ -z "$STEAM_PASSWORD" ]; then
|
||||||
echo "错误: 请设置 STEAM_USERNAME 和 STEAM_PASSWORD 环境变量"
|
echo "错误: 请设置 STEAM_USERNAME 和 STEAM_PASSWORD 环境变量" >> "$LOG_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -21,34 +25,34 @@ cd /opt/steamcmd
|
|||||||
|
|
||||||
# 检查SteamCMD是否已安装
|
# 检查SteamCMD是否已安装
|
||||||
if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
|
if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
|
||||||
echo "SteamCMD未安装,开始下载和安装..."
|
echo "SteamCMD未安装,开始下载和安装..." >> "$LOG_FILE"
|
||||||
wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
|
wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
|
||||||
tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
|
tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
|
||||||
rm /opt/steamcmd/steamcmd_linux.tar.gz
|
rm /opt/steamcmd/steamcmd_linux.tar.gz
|
||||||
chmod +x /opt/steamcmd/steamcmd.sh
|
chmod +x /opt/steamcmd/steamcmd.sh
|
||||||
echo "SteamCMD安装完成!"
|
echo "SteamCMD安装完成!" >> "$LOG_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 更新Mod(如果有配置的话)
|
# 更新Mod(如果有配置的话)
|
||||||
if [ -n "$MOD_IDS" ]; then
|
if [ -n "$MOD_IDS" ]; then
|
||||||
echo "开始更新Mod..."
|
echo "开始更新Mod..." >> "$LOG_FILE"
|
||||||
IFS=',' read -ra MOD_ARRAY <<< "$MOD_IDS"
|
IFS=',' read -ra MOD_ARRAY <<< "$MOD_IDS"
|
||||||
|
|
||||||
for mod_id in "${MOD_ARRAY[@]}"; do
|
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
|
./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +workshop_download_item 221100 $mod_id +quit
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "Mod $mod_id 更新完成"
|
echo "Mod $mod_id 更新完成" >> "$LOG_FILE"
|
||||||
else
|
else
|
||||||
echo "Mod $mod_id 更新失败"
|
echo "Mod $mod_id 更新失败" >> "$LOG_FILE"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "未配置Mod ID,跳过Mod更新"
|
echo "未配置Mod ID,跳过Mod更新" >> "$LOG_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "=========================================="
|
echo "==========================================" >> "$LOG_FILE"
|
||||||
echo "Mod更新完成!"
|
echo "Mod更新完成!" >> "$LOG_FILE"
|
||||||
echo "时间: $(date)"
|
echo "时间: $(date)" >> "$LOG_FILE"
|
||||||
echo "=========================================="
|
echo "==========================================" >> "$LOG_FILE"
|
||||||
@@ -18,6 +18,8 @@ services:
|
|||||||
- DAYZ_MISSIONS=dayzOffline.chernarusplus
|
- DAYZ_MISSIONS=dayzOffline.chernarusplus
|
||||||
- DAYZ_SERVER_PORT=2302
|
- DAYZ_SERVER_PORT=2302
|
||||||
- DAYZ_CPU_COUNT=4
|
- DAYZ_CPU_COUNT=4
|
||||||
|
- ENABLE_AUTO_UPDATE=${ENABLE_AUTO_UPDATE:-true}
|
||||||
|
- UPDATE_INTERVAL=${UPDATE_INTERVAL:-15}
|
||||||
ports:
|
ports:
|
||||||
- "2302:2302/udp"
|
- "2302:2302/udp"
|
||||||
- "2305:2305/udp"
|
- "2305:2305/udp"
|
||||||
|
|||||||
Reference in New Issue
Block a user