注解

导航

Mac 日志轮转

背景

我在macmini上安装了wireguard服务,将日志输出到了 /var/log/wireguard.log。为了防止日志无限制增大,采用logrotate的方式来处理日志。

规则:最大允许100MB。每小时检查一次。

#安装logrotate
brew install logrotate

#配置文件
sudo vim /opt/homebrew/etc/logrotate.d/wireguard
#内容如下
/var/log/wireguard.log {
    hourly          # 每小时检查一次(但 macOS 的 cron 默认不支持 hourly,需额外配置)
    size 100M       # 当文件达到 100MB 时轮转
    rotate 7        # 保留 7 个旧日志文件
    compress        # 压缩旧日志(.gz 格式)
    missingok       # 如果日志文件不存在,不报错
    notifempty      # 如果日志文件为空,不轮转
    create 640 root wheel  # 创建新日志文件时设置权限
    postrotate
        # 可选:重启 WireGuard(如果日志轮转后需要)
        # /usr/local/bin/wg-quick down wg0 && /usr/local/bin/wg-quick up wg0
    endscript
}

#配置每小时执行一次,采用launchd
sudo vim /Library/LaunchDaemons/com.wargon.logrotate-wireguard.plist
#内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.wargon.logrotate-wireguard</string>

    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/sbin/logrotate</string>
        <string>/opt/homebrew/etc/logrotate.d/wireguard</string>
    </array>

    <key>StartInterval</key>
    <integer>3600</integer>  <!-- 每小时检查一次(3600 秒) -->

    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

#加载配置
sudo launchctl load /Library/LaunchDaemons/com.wargon.logrotate-wireguard.plist
#立即生效
sudo launchctl start com.wargon.logrotate-wireguard

 

posted on 2025-05-06 10:40  注解  阅读(19)  评论(0)    收藏  举报