在 Linux 下使用 nohup 启动程序时,通常会把输出重定向到日志文件,例如:
nohup ./app.sh > app.log 2>&1 &
下面介绍几种常见的 nohup 日志备份方法,从简单到规范。
cp app.log app.log.bak_$(date +%Y%m%d_%H%M%S)
适合:
cp app.log app.log.$(date +%Y%m%d)
> app.log
或等价写法:
mv app.log app.log.$(date +%Y%m%d)
touch app.log
⚠️ 注意:
mv 方式对 nohup 进程仍然写入同一 inode,一般没问题> 会清空文件,但进程继续写which logrotate
sudo vim /etc/logrotate.d/app
示例:
/path/to/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
关键参数说明:
copytruncate:不重启进程,复制后清空原日志(适合 nohup)rotate 7:保留 7 份compress:压缩旧日志sudo logrotate -f /etc/logrotate.d/app
✅ 这是生产环境最推荐方式
crontab -e
每天凌晨备份:
0 0 * * * cp /path/to/app.log /backup/app.log.$(date +\%Y\%m\%d)
或配合清空:
0 0 * * * mv /path/to/app.log /backup/app.log.$(date +\%Y\%m\%d) && touch /path/to/app.log
[Service]
StandardOutput=append:/var/log/app.log
很多服务(Java / Python)可配置:
| 场景 | 推荐方式 |
|---|---|
| 临时 / 测试 | cp 或 mv |
| 生产环境 | ✅ logrotate |
| 自动化 | cron + logrotate |
如果你愿意,可以告诉我:
我可以帮你写一套可直接用的备份方案。