温馨提示×

centos nohup日志如何备份好

小樊
45
2026-09-03 03:45:27
栏目: 智能运维

在 CentOS 上用 nohup 启动程序时,日志通常是这样产生的:

nohup java -jar app.jar > app.log 2>&1 &

下面从实用角度讲几种日志备份/管理方案,从简单到规范。


一、最简单:定期复制日志(适合小项目)

手动或定时备份:

cp app.log /backup/app_$(date +%F).log

配合 crontab:

0 2 * * * cp /path/app.log /backup/app_$(date +%F).log

⚠️ 缺点:日志会一直变大,不清理


二、推荐:日志切割(logrotate)

CentOS 自带 logrotate,最推荐

示例(假设日志在 /opt/app/app.log)

新建配置:

vi /etc/logrotate.d/app

内容:

/opt/app/app.log {
    daily
    rotate 7
    missingok
    notifempty
    copytruncate
    compress
}

参数说明:

  • daily:每天切割
  • rotate 7:保留 7 份
  • copytruncate:不中断 nohup 进程
  • compress:压缩旧日志

测试:

logrotate -d /etc/logrotate.d/app  # 模拟
logrotate -f /etc/logrotate.d/app  # 强制执行

✅ 这是最标准做法


三、nohup + 日期日志(改启动方式)

如果你能改启动脚本:

nohup java -jar app.jar > app_$(date +%F).log 2>&1 &

每天重启一次(crontab):

0 0 * * * pkill -f app.jar; nohup java -jar /opt/app.jar > /opt/app_$(date +%F).log 2>&1 &

适合短任务 / 批处理


四、专业方案:systemd(强烈推荐新项目)

不要用 nohup,改用 systemd:

vi /etc/systemd/system/app.service
[Unit]
Description=App

[Service]
ExecStart=/usr/bin/java -jar /opt/app.jar
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log
Restart=always

[Install]
WantedBy=multi-user.target

然后:

systemctl start app

日志交给 logrotate 或 journalctl


五、不建议的做法

❌ 直接 rm app.log(进程还在写,会丢日志)
❌ 手动 > app.log(可能清空正在写的文件)


总结建议

场景 建议
个人测试 nohup + 定期 cp
生产服务 nohup + logrotate
新项目 systemd
批处理 日期日志

如果你愿意,可以告诉我:

  • 用什么程序(Java / Python / Shell)
  • 是否 7×24 运行
  • CentOS 版本

我可以给你直接可用的配置。

0 踩