Shell脚本 - 手动编辑文件后重定向到文件无效

时间:2016-11-02 06:01:03

标签: shell sh

我有一个运行如下的脚本文件。它实际上运行Java应用程序,并且控制台日志被重定向到日志文件。

$JAVA_CMD $APP_ENV $APP_MAIN_CLASS >>&! $LOGFILE &

运行正常。我尝试在进程运行时手动编辑文件。但问题是,在我编辑文件之后,当我在应用程序中执行某些操作时,现有文件中不再有任何日志。

为什么?以及如何解决它?

1 个答案:

答案 0 :(得分:1)

在写入文件时无法编辑文件。大多数编辑器最终会将文件移动到不同的inode,至少是暂时的,而您的Java进程只有一个文件句柄,该文件句柄现在已不复存在。

这里的基本概念是文件基本上是单向序列。在序列中较早的某些内容被另一个进程修改时附加到文件中的方法根本没有明确定义。

常见的解决方法是在编辑文件之前复制文件;另外,对于日志文件,是实现某种日志文件旋转机制(所以你可以说“放开日志并开始一个新的,请”),但是然后简单的重定向将无法写入日志