linux重定向输出不是打印到文件的末尾而是中间

yh2wf1be  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(267)

以下是启动命令:

nohup java $options -jar foo.jar > foo.log 2>&1 &

输出如下:

...
2020-11-26 21:27:23,577 INFO ...
2020-11-26 21:27:23,577 INFO ...
2020-11-23 12:41:55,783 INFO ...
2020-11-23 12:41:55,783 INFO ...
...

有几行以 2020-11-23 总是在文件末尾。如果java输出更多,文件将变为:

2020-11-26 21:27:23,577 INFO ...
2020-11-26 21:27:23,577 INFO ...
[The New Row]
2020-11-23 12:41:55,783 INFO ...
2020-11-23 12:41:55,783 INFO ...

最后一行总是那些行,你可以通过日期和时间来确认这一点。

用答案更新

我的剧本是这样的:

...
kill $fooPid
nohup java $options -jar foo.jar > foo.log 2>&1 &
...

这个 kill 不会立即终止程序,这意味着可能有两个程序同时写入同一个文件。
为此,我补充道 sleep 0.5 在两个命令之间。

...
kill $fooPid
sleep 0.5
nohup java $options -jar foo.jar > foo.log 2>&1 &
...

然后问题就解决了。
另外,你可以使用 kill -9 $fooPid 立即杀掉前一个程序。
(我仍然不知道为什么台词总是来自以前的节目,但现在不重要了)

h79rfbju

h79rfbju1#

start program > log
...
kill $pid
start program > log

第二个启动的进程将替换日志文件。如果前一个进程没有被终止,它现在可能会将日志写入新的日志文件。但后面的进程对此一无所知,它将从位置0写入日志文件。
灵感来自https://unix.stackexchange.com/a/346196

相关问题