如何在RHEL7中持续将一个文件的新增内容追加到另一个文件?
如何在RHEL7中持续将一个文件的新增内容追加到另一个文件?
嗨,这个需求在Linux环境里真的挺常见的,用系统自带的命令就能轻松解决,我给你分几种场景来说明:
最直接的实时跟踪追加
打开终端,直接运行下面的命令就行:
tail -f log.log >> historical_log.log
tail -f:这个参数会实时盯着log.log的新增内容,一有新行就输出>>:这是追加重定向符号,能把输出的内容加到historical_log.log末尾,不会覆盖文件里原有的内容(如果用>的话就会覆盖,千万别搞混了)
如果你想让这个命令在后台持续运行,就算关闭终端也不中断,可以用nohup配合:
nohup tail -f log.log >> historical_log.log 2>&1 &
nohup:让进程脱离终端控制,退出终端后依然能继续运行2>&1:把命令的错误输出也重定向到日志文件里,避免遗漏报错信息- 最后的
&:把进程放到后台运行
应对日志文件被轮换的情况
如果你的log.log会被日志轮换工具(比如logrotate)定期重命名或重建,普通的tail -f会因为文件句柄失效而停止跟踪。这时候换成大写的-F参数就可以解决:
tail -F log.log >> historical_log.log
-F会自动检测文件是否被替换,一旦发现原文件不存在了,会重新尝试打开同名的新文件,完美适配日志轮换的场景。
长期运行的进阶方案
如果需要这个跟踪任务长期稳定运行(比如开机自动启动),可以把它做成systemd服务:
- 创建服务文件
/etc/systemd/system/log-forward.service,内容如下:
[Unit] Description=Forward log.log to historical_log.log After=network.target [Service] ExecStart=/usr/bin/tail -F /path/to/log.log >> /path/to/historical_log.log 2>&1 Restart=always User=your_username [Install] WantedBy=multi-user.target
- 替换上面的
/path/to/为实际的文件路径,your_username为运行该服务的用户 - 启动并启用服务:
sudo systemctl daemon-reload sudo systemctl start log-forward.service sudo systemctl enable log-forward.service
这样系统启动时这个任务就会自动运行,就算进程意外退出也会自动重启,非常稳定。
备注:内容来源于stack exchange,提问作者Behnamkvl
相关产品推荐
相关产品推荐

