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
浙公网安备 33010602011771号