酷!學園

技術討論區 => Linux 討論版 => 主題作者是: hezemail 於 2019-06-20 21:35

主題: linux中输出重定向到文件后的缓存问题
作者: hezemail2019-06-20 21:35
内核:2.6.39-400.278.2.el6uek.i686
操作系统:Oracle Linux Server release 6.8

在shell中启动kettle的服务器软件
[root@mldap01 kettle6]# ./carte.sh pwd/carte-config-master-8080.xml
可以看到日志正常输出到console中,但是当使用重定向将日志重定向到文件后,文件中的日志并不是实时更新的
[root@mldap01 kettle6]#nohup  ./carte.sh pwd/carte-config-master-8080.xml >> kettle.log &
[root@mldap01 kettle6]# tail -f kettle.log
最新的日志并不会立刻写入到日志文件中。当正常停止服务时,日志会全部刷新到日志文件中。
在网上查了好久,可以肯定是因为linux的缓冲区在捣鬼,但是网上都是说怎么样在写代码时不使用缓冲区,而没人告知当不能改动程序时,怎么解决日志实时显示的问题。
已经试过contos7.2仍然有这个问题,请问该怎么操作才能使日志实时的刷新到文件中?

已经使用sync命令了,完全不起作用。因为不能将日志刷新到文件中,所以也不敢修改/proc/sys/vm/drop_caches来清除缓存,求大神帮忙!
主題: Re: linux中输出重定向到文件后的缓存问题
作者: netman2019-06-21 20:43
將 redirection 的命令寫進 carte.sh 裏面呢?
主題: Re: linux中输出重定向到文件后的缓存问题
作者: hezemail2019-06-21 21:44
將 redirection 的命令寫進 carte.sh 裏面呢?

仍然不行,carte.sh里面其实是使用java命令执行一个jar程序,只要是重定向,不管怎么做都还是无法查看到最新的日志,已经放弃了