【发布时间】:2021-03-09 09:42:42
【问题描述】:
这是启动命令:
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 不会立即杀死程序,这意味着可能有 2 个程序同时写入同一个文件。
为此,我在两个命令之间添加了sleep 0.5。
...
kill $fooPid
sleep 0.5
nohup java $options -jar foo.jar > foo.log 2>&1 &
...
然后问题就解决了。
另外,您可以使用kill -9 $fooPid 来立即杀死之前的程序。
(我仍然不知道为什么这些行最后总是来自以前的程序,但现在已经不重要了)
【问题讨论】:
-
说清楚,你有没有观察到文件在初始状态然后中间出现了一行?或者这是不是按照程序发出的顺序出现的行的问题?对于后者,我猜这是因为 stdout 和 stderr 被独立刷新到文件中。
-
前一个。最后的行总是那些行,你可以通过日期和时间来确认这一点。 @user14644949
-
我无法想象这是怎么发生的。它不能只是写入文件中间的情况 - 您必须故意将文件中的行改组以腾出空间。我假设(如您的示例所示)没有任何行被覆盖?
-
能否请edit提出问题并提供minimal reproducible example?