新增自动Mod管理功能,支持通过环境变量配置Mod ID,自动下载和更新Mod,并优化软链接创建逻辑。
This commit is contained in:
@@ -80,10 +80,35 @@ start_dayzserver() {
|
||||
cd /root/Steam/steamapps/common/DayZServer
|
||||
|
||||
# 启动服务器之前,检查mod是否有更新.
|
||||
bash /opt/updatemod.sh
|
||||
updatemodpath="/root/Steam/steamapps/workshop/content/221100"
|
||||
target_dir="/root/Steam/steamapps/common/DayZServer/client_mod"
|
||||
|
||||
find "$updatemodpath" -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= read -r -d $'\0' mod_dir; do
|
||||
# 1. 删除target_dir目录下的所有软链接
|
||||
echo "清理现有的软链接..."
|
||||
if [ -d "$target_dir" ]; then
|
||||
find "$target_dir" -type l -delete
|
||||
echo "已删除 $target_dir 目录下的所有软链接"
|
||||
else
|
||||
mkdir -p "$target_dir"
|
||||
echo "创建目录: $target_dir"
|
||||
fi
|
||||
|
||||
# 2. 根据MOD_IDS列表创建软链接
|
||||
if [ -n "$MOD_IDS" ]; then
|
||||
echo "开始根据MOD_IDS创建软链接..."
|
||||
IFS=',' read -ra MOD_ARRAY <<< "$MOD_IDS"
|
||||
|
||||
for mod_id in "${MOD_ARRAY[@]}"; do
|
||||
echo "处理Mod ID: $mod_id"
|
||||
|
||||
# 查找对应的mod目录
|
||||
mod_dir=$(find "$updatemodpath" -mindepth 1 -maxdepth 1 -type d -name "$mod_id" -print -quit)
|
||||
|
||||
if [[ -n "$mod_dir" ]]; then
|
||||
echo "找到Mod目录: $mod_dir"
|
||||
|
||||
# 查找meta.cpp文件获取mod名称
|
||||
meta_file=$(find "$mod_dir" -type f -name "meta.cpp" -print -quit)
|
||||
|
||||
if [[ -f "$meta_file" ]]; then
|
||||
@@ -91,20 +116,30 @@ start_dayzserver() {
|
||||
|
||||
if [[ -n "$mod_name" ]]; then
|
||||
symlink_path="${target_dir}/@${mod_name}"
|
||||
if [[ ! -L "$symlink_path" ]]; then
|
||||
echo "为 [$mod_name] 创建软链接: $symlink_path → $mod_dir"
|
||||
echo "为 [$mod_name] (ID: $mod_id) 创建软链接: $symlink_path → $mod_dir"
|
||||
ln -s "$mod_dir" "$symlink_path"
|
||||
else
|
||||
echo "软链接已存在: $symlink_path, 跳过创建"
|
||||
echo "警告: 在 $meta_file 中未找到 name 字段,使用ID作为名称"
|
||||
symlink_path="${target_dir}/@${mod_id}"
|
||||
echo "为 [ID: $mod_id] 创建软链接: $symlink_path → $mod_dir"
|
||||
ln -s "$mod_dir" "$symlink_path"
|
||||
fi
|
||||
else
|
||||
echo "警告: 在 $meta_file 中未找到 name 字段"
|
||||
echo "警告: 在 $mod_dir 中未找到 meta.cpp 文件,使用ID作为名称"
|
||||
symlink_path="${target_dir}/@${mod_id}"
|
||||
echo "为 [ID: $mod_id] 创建软链接: $symlink_path → $mod_dir"
|
||||
ln -s "$mod_dir" "$symlink_path"
|
||||
fi
|
||||
else
|
||||
echo "警告: 在 $mod_dir 中未找到 meta.cpp 文件"
|
||||
echo "警告: 未找到ID为 $mod_id 的Mod目录"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "软链接创建完成!"
|
||||
else
|
||||
echo "未配置MOD_IDS,跳过软链接创建"
|
||||
fi
|
||||
|
||||
|
||||
# 初始化mod变量
|
||||
client_mods=""
|
||||
|
||||
50
README.md
50
README.md
@@ -88,7 +88,10 @@ docker-compose up -d
|
||||
| `DAYZ_MISSIONS` | `dayzOffline.chernarusplus` | 服务器地图 |
|
||||
| `DAYZ_SERVER_PORT` | `2302` | 服务器端口 |
|
||||
| `DAYZ_CPU_COUNT` | `4` | 使用的CPU核心数 |
|
||||
| `MOD_IDS` | `空` | 需要更新的modid,例如:"123456789,987654321" |
|
||||
| `MOD_IDS` | - | Mod ID列表,用逗号分隔 |
|
||||
| `ENABLE_AUTO_UPDATE` | `true` | 是否启用自动更新 |
|
||||
| `UPDATE_INTERVAL` | `15` | 自动更新间隔(分钟) |
|
||||
|
||||
|
||||
### 端口映射
|
||||
|
||||
@@ -160,32 +163,49 @@ docker-compose up -d
|
||||
|
||||
## 🔧 Mod管理
|
||||
|
||||
### 添加客户端Mod
|
||||
### 自动Mod管理
|
||||
|
||||
项目现在支持自动Mod管理功能:
|
||||
|
||||
1. **配置Mod ID**: 在环境变量中设置 `MOD_IDS`,例如:
|
||||
```bash
|
||||
MOD_IDS=123456789,987654321,456789123
|
||||
```
|
||||
|
||||
2. **自动更新**: 系统会自动下载和更新指定的Mod
|
||||
3. **自动软链接**: 系统会根据Mod ID自动创建软链接到 `client_mod` 目录
|
||||
4. **智能命名**: 优先使用Mod的 `meta.cpp` 中的名称,如果没有则使用Mod ID
|
||||
|
||||
### 手动Mod管理
|
||||
|
||||
如果您想手动管理Mod:
|
||||
|
||||
1. 将Mod文件放入 `dayz/client_mod/` 目录
|
||||
2. Mod文件夹应以 `@` 开头
|
||||
3. 重启服务器以加载新Mod
|
||||
|
||||
### 添加服务端Mod
|
||||
### 更新Mod
|
||||
|
||||
1. 将Mod文件放入 `dayz/server_mod/` 目录
|
||||
2. Mod文件夹应以 `@` 开头
|
||||
3. 重启服务器以加载新Mod
|
||||
#### 自动更新
|
||||
- **启用自动更新**: 设置 `ENABLE_AUTO_UPDATE=true`(默认启用)
|
||||
- **更新间隔**: 通过 `UPDATE_INTERVAL` 设置(默认15分钟)
|
||||
- **查看更新日志**: `docker-compose exec steamcmd cat /var/log/updatemod.log`
|
||||
|
||||
### 更新客户端Mod
|
||||
#### 手动更新
|
||||
1. 需要先停止容器运行 `docker compose down`
|
||||
2. 然后运行更新命令 `docker compose run --rm steamcmd updatemod`
|
||||
3. 更新完毕后启动docker容器即可.
|
||||
3. 更新完毕后启动docker容器即可
|
||||
|
||||
### Mod配置示例
|
||||
|
||||
```
|
||||
dayz/
|
||||
├── client_mod/
|
||||
│ ├── @CF
|
||||
│ └── @DayZExpansion
|
||||
│ ├── @CF # 自动创建的软链接
|
||||
│ ├── @DayZExpansion # 自动创建的软链接
|
||||
│ └── @CustomMod # 手动添加的Mod
|
||||
└── server_mod/
|
||||
└── @DayZExpansionServer
|
||||
└── @DayZExpansionServer # 服务端Mod
|
||||
```
|
||||
|
||||
## 📊 监控和日志
|
||||
@@ -259,6 +279,14 @@ docker-compose exec steamcmd netstat -tulpn
|
||||
|
||||
## 📝 更新日志
|
||||
|
||||
### v1.1.0
|
||||
- 新增自动Mod管理功能
|
||||
- 支持通过MOD_IDS环境变量配置Mod
|
||||
- 自动下载和更新Mod
|
||||
- 智能软链接创建(优先使用meta.cpp中的名称)
|
||||
- 新增自动更新功能(cron定时任务)
|
||||
- 优化Mod加载逻辑
|
||||
|
||||
### v1.0.0
|
||||
- 初始版本发布
|
||||
- 支持基本的DayZ服务器部署
|
||||
|
||||
Reference in New Issue
Block a user