feat: 日志轮转(保留 14 天)
main.log 无轮转、已涨到 34MB,且每晚任务都会继续追加。 - logrotate/xwlb 模板 + scripts/install_logrotate.sh(幂等,装到 /etc/logrotate.d/xwlb) - 每天轮转、保留 14 份、立即压缩 → main.log-YYYYMMDD.gz - 必须用 copytruncate:脚本以 >>main.log 长开句柄,改名式轮转会 让当晚日志写进归档、新文件空着 - journald 同步设 MaxRetentionSec=14day + SystemMaxUse=500M - 安装脚本自带 logrotate -d 校验(这条立刻抓到"指令行尾注释"被当成参数值的错误) - tests/test_logrotate.py 19 项,锁住保留天数、行尾注释、占位符替换 实测:34MB → 2.9MB,归档 32453 行与轮转前完全一致
This commit is contained in:
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
# 安装/更新日志轮转(需要 sudo;幂等,可反复执行)
|
||||
#
|
||||
# bash scripts/install_logrotate.sh
|
||||
#
|
||||
# 做三件事:
|
||||
# 1) 把 logrotate/xwlb 装到 /etc/logrotate.d/xwlb(替换路径与属主占位符)
|
||||
# 2) 给 systemd journal 加上限(保留 14 天,避免 journal 无限增长)
|
||||
# 3) 用 logrotate -d 校验配置,并打印当前归档
|
||||
set -euo pipefail
|
||||
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
OWNER="$(id -un)"
|
||||
GROUP="$(id -gn)"
|
||||
SUDO=""
|
||||
if [ "$(id -u)" -ne 0 ]; then SUDO="sudo"; fi
|
||||
|
||||
echo "== 1/3 安装 logrotate 配置 =="
|
||||
TMP="$(mktemp)"
|
||||
trap 'rm -f "$TMP"' EXIT
|
||||
sed -e "s#@PROJECT_DIR@#$DIR#g" -e "s#@OWNER@#$OWNER#g" -e "s#@GROUP@#$GROUP#g" \
|
||||
"$DIR/logrotate/xwlb" > "$TMP"
|
||||
$SUDO install -m 0644 -o root -g root "$TMP" /etc/logrotate.d/xwlb
|
||||
echo " /etc/logrotate.d/xwlb(路径 $DIR,属主 $OWNER)"
|
||||
|
||||
echo "== 2/3 journal 上限 =="
|
||||
$SUDO mkdir -p /etc/systemd/journald.conf.d
|
||||
$SUDO tee /etc/systemd/journald.conf.d/xwlb.conf >/dev/null <<EOF
|
||||
# 《新闻联播》任务日志:保留 14 天 + 总量上限,避免 journal 无限增长
|
||||
# 安装来源:$DIR/scripts/install_logrotate.sh
|
||||
[Journal]
|
||||
MaxRetentionSec=14day
|
||||
SystemMaxUse=500M
|
||||
EOF
|
||||
echo " /etc/systemd/journald.conf.d/xwlb.conf(保留 14 天 / 上限 500M)"
|
||||
if systemctl is-active --quiet systemd-journald; then
|
||||
$SUDO systemctl restart systemd-journald
|
||||
echo " systemd-journald 已重启使配置生效"
|
||||
fi
|
||||
|
||||
echo "== 3/3 校验配置 =="
|
||||
$SUDO logrotate -d /etc/logrotate.d/xwlb 2>&1 | grep -E "considering|rotating|log needs|error|reading config" | head -8 || true
|
||||
echo
|
||||
echo "== 当前归档 =="
|
||||
ls -lh "$DIR"/main.log* 2>/dev/null | awk '{printf " %-42s %s\n", $NF, $5}' || echo " (暂无)"
|
||||
echo
|
||||
echo "轮转由 logrotate.timer 每天触发:"
|
||||
systemctl list-timers logrotate.timer --no-pager 2>/dev/null | head -2 || true
|
||||
echo
|
||||
echo "立即轮转一次(可选): sudo logrotate -f /etc/logrotate.d/xwlb"
|
||||
echo "查看归档内容: zcat $DIR/main.log-YYYYMMDD.gz | less"
|
||||
Reference in New Issue
Block a user