App logs kept forever: nightly gzip on 249 (LOG_FILE_ROTATION=external), hourly pull to 247 via a forced-command key, health warns if the archive stops
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
33
ops/applogs/archive-app-log.sh
Executable file
33
ops/applogs/archive-app-log.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# روی ۲۴۹، هر شب (zareian-applog-archive.timer). app.log را به logs/archive/ میبرد و فشرده میکند.
|
||||
# برنامه با LOG_FILE_ROTATION=external از WatchedFileHandler استفاده میکند و پس از جابهجایی خودش app.log تازه
|
||||
# میسازد؛ خطی که در همان لحظه نوشته شود در فایلِ جابهجاشده میماند، گم نمیشود.
|
||||
# اینجا فقط ۳۰ روز میماند (دیسکِ ۲۴۹ پر است) و فقط فایلی پاک میشود که ۲۴۷ گرفتنش را تأیید کرده
|
||||
# (`.shipped`)؛ نسخهی همیشگی روی ۲۴۷ است (pull-app-logs.sh). فقط زیرِ ~/mathapp-v2/logs مینویسد.
|
||||
set -euo pipefail
|
||||
LOGS=/home/administrator/mathapp-v2/logs
|
||||
ARCH="$LOGS/archive"
|
||||
mkdir -p "$ARCH"
|
||||
chmod 750 "$ARCH"
|
||||
stamp=$(date -u +%Y%m%dT%H%M%SZ)
|
||||
|
||||
# app.log.1..5 از RotatingFileHandlerِ پیشین (پیش از LOG_FILE_ROTATION=external) هم یک بار بایگانی میشوند.
|
||||
for f in "$LOGS"/app.log.[0-9]*; do
|
||||
[ -e "$f" ] || continue
|
||||
n=${f##*.}
|
||||
mv "$f" "$ARCH/app-$stamp-old$n.log"
|
||||
done
|
||||
if [ -s "$LOGS/app.log" ]; then
|
||||
mv "$LOGS/app.log" "$ARCH/app-$stamp.log"
|
||||
sleep 5 # نوشتنِ در جریانِ workerها روی فایلِ قدیمی تمام شود
|
||||
fi
|
||||
for f in "$ARCH"/app-*.log; do
|
||||
[ -e "$f" ] || continue
|
||||
gzip -9 "$f"
|
||||
chmod 640 "$f.gz"
|
||||
done
|
||||
|
||||
find "$ARCH" -name 'app-*.log.gz' -mtime +30 | while read -r gz; do
|
||||
[ -e "$gz.shipped" ] && rm -f -- "$gz" "$gz.shipped"
|
||||
done
|
||||
echo "archived $(ls "$ARCH"/app-*.log.gz 2>/dev/null | wc -l) files in $ARCH"
|
||||
Reference in New Issue
Block a user