fix: recover merged uploads and rotate logs
This commit is contained in:
@@ -15,7 +15,10 @@ CA_BUNDLE="$RUNTIME_ROOT/etc/ssl/certs/ca-certificates.crt"
|
||||
RUN_ROOT="$DATA_ROOT/run"
|
||||
LOG_ROOT="$DATA_ROOT/log"
|
||||
APP_PID_FILE="$RUN_ROOT/liverecorder.pid"
|
||||
LOG_MONITOR_PID_FILE="$RUN_ROOT/liverecorder-log-monitor.pid"
|
||||
APP_LOG="$LOG_ROOT/liverecorder.log"
|
||||
APP_LOG_MAX_BYTES=52428800
|
||||
APP_LOG_RETAINED_FILES=3
|
||||
ADMIN_PASSWORD_FILE="$DATA_ROOT/admin-password.seed"
|
||||
POSTGRES_ENROLLMENT_TOKEN_FILE="$DATA_ROOT/postgres-enrollment-token.seed"
|
||||
POSTGRES_CREDENTIALS_FILE="$DATA_ROOT/postgres-client.conf"
|
||||
@@ -36,6 +39,49 @@ log_message() {
|
||||
printf '%s - %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" >>"$APP_LOG"
|
||||
}
|
||||
|
||||
rotate_app_log() {
|
||||
[ -f "$APP_LOG" ] || return 0
|
||||
size=$(wc -c <"$APP_LOG" 2>/dev/null | tr -d '[:space:]')
|
||||
case "$size" in ''|*[!0-9]*) return 0 ;; esac
|
||||
[ "$size" -ge "$APP_LOG_MAX_BYTES" ] || return 0
|
||||
|
||||
index=$APP_LOG_RETAINED_FILES
|
||||
rm -f "$APP_LOG.$index"
|
||||
while [ "$index" -gt 1 ]; do
|
||||
previous=$((index - 1))
|
||||
if [ -f "$APP_LOG.$previous" ]; then
|
||||
mv "$APP_LOG.$previous" "$APP_LOG.$index"
|
||||
fi
|
||||
index=$previous
|
||||
done
|
||||
|
||||
tail -c "$APP_LOG_MAX_BYTES" "$APP_LOG" >"$APP_LOG.1.tmp" 2>/dev/null || return 0
|
||||
mv "$APP_LOG.1.tmp" "$APP_LOG.1"
|
||||
: >"$APP_LOG"
|
||||
}
|
||||
|
||||
start_log_monitor() {
|
||||
rm -f "$LOG_MONITOR_PID_FILE"
|
||||
(
|
||||
while app_pid >/dev/null 2>&1; do
|
||||
rotate_app_log
|
||||
sleep 60
|
||||
done
|
||||
) &
|
||||
printf '%s\n' "$!" >"$LOG_MONITOR_PID_FILE"
|
||||
}
|
||||
|
||||
stop_log_monitor() {
|
||||
if [ -f "$LOG_MONITOR_PID_FILE" ]; then
|
||||
monitor_pid=$(sed -n '1p' "$LOG_MONITOR_PID_FILE" | tr -d '[:space:]')
|
||||
case "$monitor_pid" in
|
||||
''|*[!0-9]*) ;;
|
||||
*) kill "$monitor_pid" 2>/dev/null || true ;;
|
||||
esac
|
||||
fi
|
||||
rm -f "$LOG_MONITOR_PID_FILE"
|
||||
}
|
||||
|
||||
app_pid() {
|
||||
if [ -f "$APP_PID_FILE" ]; then
|
||||
pid=$(sed -n '1p' "$APP_PID_FILE" | tr -d '[:space:]')
|
||||
@@ -199,10 +245,13 @@ start_app() {
|
||||
fi
|
||||
|
||||
rm -f "$APP_PID_FILE"
|
||||
stop_log_monitor
|
||||
rotate_app_log
|
||||
select_database_connection || return 1
|
||||
launch_attempt=1
|
||||
launch_app_process
|
||||
pid=$APP_PROCESS_PID
|
||||
start_log_monitor
|
||||
|
||||
attempt=0
|
||||
while [ "$attempt" -lt 90 ]; do
|
||||
@@ -231,6 +280,7 @@ start_app() {
|
||||
}
|
||||
|
||||
stop_app() {
|
||||
stop_log_monitor
|
||||
if pid=$(app_pid); then
|
||||
kill "$pid" 2>/dev/null || true
|
||||
attempt=0
|
||||
|
||||
Reference in New Issue
Block a user