#!/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 <&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"