在 Linux 下备份 Node.js 日志,通常取决于你日志的存储方式(文件、stdout、第三方日志库、容器等)。下面按常见场景给你一套实用方案。
常见日志位置:
/var/log/myapp/
/home/user/app/logs/
~/.pm2/logs/
journalctl -u yourapp
/var/lib/docker/containers/
cp /var/log/myapp/app.log /backup/app-$(date +%F).log
crontab -e
每天凌晨 2 点备份:
0 2 * * * cp /var/log/myapp/*.log /backup/
适合长期运行的服务
sudo vim /etc/logrotate.d/nodeapp
内容:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
说明:
copytruncate:不重启 Node.js 也能切割日志(很重要)compress:节省空间rotate 7:保留 7 天测试:
sudo logrotate -d /etc/logrotate.d/nodeapp
pm2 logs
pm2 info <app>
cp ~/.pm2/logs/* /backup/pm2/
PM2 官方支持:
pm2 install pm2-logrotate
配置示例:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
如果是 systemd 启动的 Node.js:
journalctl -u yourapp > /backup/yourapp-$(date +%F).log
定时备份:
0 3 * * * journalctl -u yourapp > /backup/yourapp-$(date +%F).log
docker run -v /host/logs:/app/logs nodeapp
然后按普通文件备份。
docker logs mynodeapp > /backup/node-$(date +%F).log
rsyncrsync -avz /var/log/myapp/ user@backup:/backup/myapp/
✅ 日志写入文件,而不是只打 console
✅ 使用 winston / pino 等日志库
✅ 一定要 copytruncate 或信号切割
✅ 日志和代码分离目录
✅ 定期清理旧日志
如果你愿意,可以告诉我:
我可以帮你写完整的备份脚本或配置。