Bash 如何在不重新启动命令的情况下切换到正在运行的进程输出重定向到的新文件?
我有一个不想重新启动的后台进程。它的输出正在被记录到一个文件中Bash 如何在不重新启动命令的情况下切换到正在运行的进程输出重定向到的新文件?,bash,shell,unix,Bash,Shell,Unix,我有一个不想重新启动的后台进程。它的输出正在被记录到一个文件中 nohup mycommand 1> myoutputfile.log 2>&1 & 我想“归档”进程当前正在写入其输出的文件,并使其开始以相同的文件名写入空白文件我必须能够做到这一点,而不必终止进程并重新启动它。 我尝试简单地重命名现有文件(改为myoutputfile.log),希望shell现在发现该文件不再存在,将创建一个具有原始文件名的新文件(myoutputfile.log)。但这不起作用,
nohup mycommand 1> myoutputfile.log 2>&1 &
我想“归档”进程当前正在写入其输出的文件,并使其开始以相同的文件名写入空白文件我必须能够做到这一点,而不必终止进程并重新启动它。
我尝试简单地重命名现有文件(改为myoutputfile.log
),希望shell现在发现该文件不再存在,将创建一个具有原始文件名的新文件(myoutputfile.log
)。但这不起作用,因为shell持有对文件位置的引用并一直附加到它
我看了看。在执行ls
时,我看到流现在标记为(已删除)
,但我很困惑接下来该怎么做。在gdb
命令中,除了进程ID之外,我还必须指定进程可执行文件吗?如果我没有指定,或者我弄错了,会发生什么?一旦进入gdb
,如何强制流在已删除文件的相同位置(相同路径和文件名)重新创建文件
如何使用shell中的命令向它发出信号,为现有进程的输出重定向启动一个新文件
附言:我不能做反复试验,因为这对我来说很重要。如果与了解相关,这是一个
java
过程。我通过执行以下操作解决了此问题:
cp myoutputfile.log myoutputfile_.log; echo > myoutputfile.log
这实际上是在将原始内容复制到新文件后重置日志文件。您似乎在寻找
logrotate
。很有趣。请写一个关于logrotate
的101课的基本答案好吗<代码>:)@devnull但我如何在不干扰配置文件和系统设置的情况下动态执行此操作?这似乎是针对预先配置的基于时间表的轮换。我没有答案,但你确实可以尝试一下。只需设置另一个命令,将其打印到另一个文件,并在其上进行实验。使用是另一个选项。可能比logrotate更简单。