Skip to content

Commit 8a5f118

Browse files
committed
workflow
1 parent 21cbb3f commit 8a5f118

7 files changed

Lines changed: 89 additions & 16 deletions

File tree

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ Edit the `enshrouded_server.json` file to configure gameplay/world settings.
404404
|--------------------|--------------------------------------------|--------------------------|---------------------------|
405405
| **name** | Name of the server | "Enshrouded Server" | Any string |
406406
| **saveDirectory** | Directory where savegames are stored | "./savegame" | File path |
407-
| **logDirectory** | Directory for log files | "./logs" | File path |
407+
| **logDirectory** | Directory for log files | "./logs" | File path (`ENSHROUDED_LOG_DIR`). Also used for `server_manager.log` and `server_manager_backup/`. |
408408
| **ip** | Server IP binding | "0.0.0.0" | Server IP address |
409409
| ... | ... | ... | ... |
410410

@@ -453,6 +453,8 @@ docker exec enshroudedserver start
453453
# 4. Docker Commands
454454

455455
- `docker logs -f enshroudedserver`: Follows recent container logs live.
456+
- Manager runtime log file (including `supervisord` main log): `/home/enshrouded/server/logs/server_manager.log` (or `${ENSHROUDED_LOG_DIR}/server_manager.log`).
457+
- On bootstrap, an existing `server_manager.log` is rotated to `/home/enshrouded/server/logs/server_manager_backup/server_manager_<timestamp>.log`.
456458
- `docker start enshroudedserver`: Starts the existing container.
457459
- `docker stop enshroudedserver`: Stops the container with a safe 90s grace period.
458460
- `docker restart enshroudedserver`: Restarts the container with graceful shutdown behavior.

docs/README_DOCKER_HUB.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ docker run \
4747
## Simple Docker Commands
4848

4949
- `docker logs -f enshroudedserver`: Follows recent container logs live.
50+
- Manager runtime log file (including `supervisord` main log): `/home/enshrouded/server/logs/server_manager.log` (or `${ENSHROUDED_LOG_DIR}/server_manager.log`).
51+
- On bootstrap, an existing `server_manager.log` is rotated to `/home/enshrouded/server/logs/server_manager_backup/server_manager_<timestamp>.log`.
5052
- `docker start enshroudedserver`: Starts the existing container.
5153
- `docker stop enshroudedserver`: Stops the container with a safe 90s grace period.
5254
- `docker restart enshroudedserver`: Restarts the container with graceful shutdown behavior.

docs/commands.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ For full container shutdowns, use a 90-second grace period: `docker stop -t 90 e
55

66
Note: All commands below are shown without the `server` prefix. Internally, they are aliases to the same script. If needed, you can still run them as `docker exec enshroudedserver server <command>`.
77
Most commands can run without extra arguments and then use defaults from `server_manager.json` / `enshrouded_server.json` (for example cron schedules and player-check behavior).
8+
Manager runtime logs (including `supervisord` main log) are written to `${ENSHROUDED_LOG_DIR}/server_manager.log` (default: `/home/enshrouded/server/logs/server_manager.log`).
89

910
## Simple Commands (Quick Readme)
1011

docs/docker_run_all_env_example.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ docker run \
158158
-e VALIDATION_MENU_SPEC_FILE='/usr/local/etc/enshrouded/env/menu.csv' \
159159
-e VALIDATION_SERVER_MANAGER_SPEC_FILE='/usr/local/etc/enshrouded/env/env_server_manager.csv' \
160160
-e VERSION_FILE_PATH='/home/enshrouded/current_version' \
161-
bonsaibauer/enshrouded_server_docker:dev_latest
162-
```
161+
bonsaibauer/enshrouded_server_docker:dev_latest
162+
```
163+
164+
Notes:
165+
- `ENSHROUDED_LOG_DIR` is also used by manager runtime logs.
166+
- Manager log file path: `${ENSHROUDED_LOG_DIR}/server_manager.log` (default: `/home/enshrouded/server/logs/server_manager.log`).
167+
- Rotated manager logs are stored in `${ENSHROUDED_LOG_DIR}/server_manager_backup/`.
163168

docs/enshrouded_server.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This document includes:
1515
|--------------------|--------------------------------------------|--------------------------|---------------------------|
1616
| **name** | Name of the server | "Enshrouded Server" | Any string (`ENSHROUDED_NAME`) |
1717
| **saveDirectory** | Directory where savegames are stored | "./savegame" | File path (`ENSHROUDED_SAVE_DIR`) |
18-
| **logDirectory** | Directory for log files | "./logs" | File path (`ENSHROUDED_LOG_DIR`) |
18+
| **logDirectory** | Directory for log files | "./logs" | File path (`ENSHROUDED_LOG_DIR`). Also hosts `server_manager.log` and `server_manager_backup/`. |
1919
| **ip** | Server IP binding | "0.0.0.0" | Server IPv4 address (`ENSHROUDED_IP`) |
2020
| **queryPort** | Port used for server queries | 15637 | Integer 1..65535 (`ENSHROUDED_QUERY_PORT`) |
2121
| **slotCount** | Max number of players | 16 | Integer 1..16 (`ENSHROUDED_SLOT_COUNT`) |

docs/server_manager.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,12 @@ This document includes:
118118
- `updateCron`, `backupCron`, and `restartCron` are optional cron schedules.
119119
- If a cron field is `null`, that schedule is disabled.
120120
- Hook commands run inside the container job runtime and should be idempotent where possible.
121+
122+
---
123+
124+
## Manager Runtime Logs
125+
126+
- Manager runtime logs are written to `<resolved-log-dir>/server_manager.log` (default: `/home/enshrouded/server/logs/server_manager.log`).
127+
- Path resolution order: `ENSHROUDED_LOG_DIR` ENV -> `enshrouded_server.json` (`.logDirectory`) -> fallback `logs`.
128+
- This file also includes the `supervisord` main log output.
129+
- On bootstrap, if `server_manager.log` already exists and is non-empty, it is rotated to `<resolved-log-dir>/server_manager_backup/server_manager_<timestamp>.log`.

server_manager/jobs/bootstrap

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,36 @@ prepare_enshrouded_app_folders() {
6969
A2S_PY_PACKAGE_NAME="${A2S_PY_PACKAGE_NAME:-python-a2s}"
7070
A2S_PY_PACKAGE_VERSION="${A2S_PY_PACKAGE_VERSION:-1.3.0}"
7171
A2S_PY_INSTALL_TIMEOUT_SECONDS="${A2S_PY_INSTALL_TIMEOUT_SECONDS:-45}"
72-
MANAGER_LOG_DIR_DEFAULT_SUFFIX="server_manager/logs"
72+
MANAGER_LOG_DIR_DEFAULT_SUFFIX="logs"
7373
MANAGER_LOG_FILE_NAME_DEFAULT="server_manager.log"
74+
MANAGER_LOG_BACKUP_DIR_NAME_DEFAULT="server_manager_backup"
75+
76+
resolve_manager_log_paths() {
77+
local base_log_dir manager_log_file manager_log_backup_dir config_log_dir config_file
78+
base_log_dir="${ENSHROUDED_LOG_DIR:-}"
79+
80+
if [[ -z "$base_log_dir" ]]; then
81+
config_file="${install_path}/enshrouded_server.json"
82+
if [[ -f "$config_file" ]] && command -v jq >/dev/null 2>&1; then
83+
config_log_dir="$(jq -r '.logDirectory // empty' "$config_file" 2>/dev/null || true)"
84+
if [[ -n "$config_log_dir" && "$config_log_dir" != "null" ]]; then
85+
base_log_dir="$config_log_dir"
86+
fi
87+
fi
88+
fi
89+
90+
if [[ -z "$base_log_dir" ]]; then
91+
base_log_dir="$MANAGER_LOG_DIR_DEFAULT_SUFFIX"
92+
fi
93+
94+
if [[ "$base_log_dir" != /* ]]; then
95+
base_log_dir="${install_path}/${base_log_dir}"
96+
fi
97+
manager_log_file="${base_log_dir}/${MANAGER_LOG_FILE_NAME_DEFAULT}"
98+
manager_log_backup_dir="${base_log_dir}/${MANAGER_LOG_BACKUP_DIR_NAME_DEFAULT}"
99+
100+
printf '%s\n%s\n%s\n' "$base_log_dir" "$manager_log_file" "$manager_log_backup_dir"
101+
}
74102

75103
is_steam_a2s_python_library_ready() {
76104
local package_name package_version
@@ -207,11 +235,13 @@ create_folders() {
207235
info "Creating server folders (save, logs, backup)"
208236
mkdir -p "$MANAGER_DATA_DIR" "$MANAGER_PROFILE_DIR" "$EN_PROFILE_DIR"
209237

210-
local manager_log_dir_default manager_log_dir manager_log_backup_dir
211-
manager_log_dir_default="${install_path}/${MANAGER_LOG_DIR_DEFAULT_SUFFIX}"
212-
manager_log_dir="$manager_log_dir_default"
213-
manager_log_backup_dir="${manager_log_dir}/backup"
238+
local manager_log_dir manager_log_file manager_log_backup_dir
239+
mapfile -t _manager_log_paths < <(resolve_manager_log_paths)
240+
manager_log_dir="${_manager_log_paths[0]}"
241+
manager_log_file="${_manager_log_paths[1]}"
242+
manager_log_backup_dir="${_manager_log_paths[2]}"
214243
mkdir -p "$manager_log_dir" "$manager_log_backup_dir"
244+
: >"$manager_log_file" 2>/dev/null || true
215245

216246
if [[ -n "$ENSHROUDED_SAVE_DIR" ]]; then
217247
if [[ "$ENSHROUDED_SAVE_DIR" == /* ]]; then
@@ -246,7 +276,13 @@ apply_permissions() {
246276
[[ -n "${MANAGER_DATA_DIR:-}" && "$MANAGER_DATA_DIR" == /* ]] && chown -R enshrouded:enshrouded "$MANAGER_DATA_DIR"
247277
[[ -n "${MANAGER_PROFILE_DIR:-}" && "$MANAGER_PROFILE_DIR" == /* ]] && chown -R enshrouded:enshrouded "$MANAGER_PROFILE_DIR"
248278
[[ -n "${EN_PROFILE_DIR:-}" && "$EN_PROFILE_DIR" == /* ]] && chown -R enshrouded:enshrouded "$EN_PROFILE_DIR"
249-
chown -R enshrouded:enshrouded "${install_path}/${MANAGER_LOG_DIR_DEFAULT_SUFFIX}"
279+
local manager_log_dir manager_log_file manager_log_backup_dir
280+
mapfile -t _manager_log_paths < <(resolve_manager_log_paths)
281+
manager_log_dir="${_manager_log_paths[0]}"
282+
manager_log_file="${_manager_log_paths[1]}"
283+
manager_log_backup_dir="${_manager_log_paths[2]}"
284+
chown -R enshrouded:enshrouded "$manager_log_dir" "$manager_log_backup_dir"
285+
chown enshrouded:enshrouded "$manager_log_file" 2>/dev/null || true
250286
[[ "$ENSHROUDED_SAVE_DIR" == /* ]] && chown -R enshrouded:enshrouded "$ENSHROUDED_SAVE_DIR"
251287
[[ "$ENSHROUDED_LOG_DIR" == /* ]] && chown -R enshrouded:enshrouded "$ENSHROUDED_LOG_DIR"
252288
[[ "$BACKUP_DIR" == /* ]] && chown -R enshrouded:enshrouded "$BACKUP_DIR"
@@ -256,14 +292,15 @@ apply_permissions() {
256292
}
257293

258294
setup_syslog() {
259-
local rsyslog_conf_path supervisor_syslog_conf_path
260-
local manager_log_dir_default manager_log_dir manager_log_backup_dir manager_log_file
295+
local rsyslog_conf_path supervisor_syslog_conf_path supervisord_main_conf_path
296+
local manager_log_dir manager_log_backup_dir manager_log_file
261297
rsyslog_conf_path="${rsyslog_conf:-/etc/rsyslog.d/stdout.conf}"
262298
supervisor_syslog_conf_path="${supervisor_syslog_conf:-/usr/local/etc/supervisor/conf.d/syslog.conf}"
263-
manager_log_dir_default="${install_path}/${MANAGER_LOG_DIR_DEFAULT_SUFFIX}"
264-
manager_log_dir="$manager_log_dir_default"
265-
manager_log_backup_dir="${manager_log_dir}/backup"
266-
manager_log_file="${manager_log_dir}/${MANAGER_LOG_FILE_NAME_DEFAULT}"
299+
supervisord_main_conf_path="${supervisord_conf:-/etc/supervisor/supervisord.conf}"
300+
mapfile -t _manager_log_paths < <(resolve_manager_log_paths)
301+
manager_log_dir="${_manager_log_paths[0]}"
302+
manager_log_file="${_manager_log_paths[1]}"
303+
manager_log_backup_dir="${_manager_log_paths[2]}"
267304

268305
mkdir -p "$(dirname "$rsyslog_conf_path")" "$(dirname "$supervisor_syslog_conf_path")" "$manager_log_dir" "$manager_log_backup_dir"
269306

@@ -303,6 +340,23 @@ autostart=true
303340
autorestart=true
304341
priority=10
305342
EOF
343+
344+
if [[ -f "$supervisord_main_conf_path" ]]; then
345+
# Keep supervisord main log in the same manager log file.
346+
sed -i -E "s|^logfile=.*$|logfile=${manager_log_file}|" "$supervisord_main_conf_path"
347+
if grep -q '^logfile_maxbytes=' "$supervisord_main_conf_path"; then
348+
sed -i -E 's|^logfile_maxbytes=.*$|logfile_maxbytes=0|' "$supervisord_main_conf_path"
349+
else
350+
sed -i -E "/^logfile=/a logfile_maxbytes=0" "$supervisord_main_conf_path"
351+
fi
352+
if grep -q '^logfile_backups=' "$supervisord_main_conf_path"; then
353+
sed -i -E 's|^logfile_backups=.*$|logfile_backups=0|' "$supervisord_main_conf_path"
354+
else
355+
sed -i -E "/^logfile_maxbytes=/a logfile_backups=0" "$supervisord_main_conf_path"
356+
fi
357+
else
358+
warn "supervisord main config not found: $supervisord_main_conf_path"
359+
fi
306360
}
307361

308362
run_entrypoint_mode() {

0 commit comments

Comments
 (0)