在 Debian 上备份 Go(Golang)应用产生的日志,通常和“普通文件备份”类似,关键看你日志写在哪里、怎么滚分。下面按常见场景给你一套可落地的做法。
常见位置:
/opt/myapp/logs//var/log/myapp/journalctl先确认:
ls -lh /var/log/myapp
cp -a /var/log/myapp /backup/myapp_logs_$(date +%F)
tar czf /backup/myapp_logs_$(date +%F).tar.gz /var/log/myapp
如果 Golang 日志是自己写文件(没用 journald),一定要配 logrotate。
sudo vim /etc/logrotate.d/myapp
内容:
/var/log/myapp/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
copytruncate对 Golang 很重要,避免重启进程
手动测试:
sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
journalctl -u myapp.service
journalctl -u myapp.service > /backup/myapp_$(date +%F).log
sudo vim /etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=30day
sudo systemctl restart systemd-journald
crontab -e
每天凌晨 2 点:
0 2 * * * tar czf /backup/myapp_logs_$(date +\%F).tar.gz /var/log/myapp
⚠️ Golang 不自动切割日志
⚠️ 不要直接 rm 正在写的日志
⚠️ 用 copytruncate 而不是 create
⚠️ 备份前确认磁盘空间
如果你愿意,可以告诉我:
我可以直接帮你写 完整备份脚本 + logrotate 配置。