簡體   English   中英

Linux 重定向 output 不是打印到末尾而是文件中間

[英]Linux redirected output not print to the end but the middle of file

這是啟動命令:

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

output 像這樣:

...
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 output更多,文件會變成:

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 個程序同時寫入同一個文件

為此,我在 2 個命令之間添加了sleep 0.5

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

然后問題解決了。

此外,您可以使用kill -9 $fooPid前一個程序。

(我仍然不知道為什么這些行最后總是來自以前的程序,但現在沒關系了)

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

第二次啟動的進程將替換日志文件。 如果前一個進程沒有被殺死,它現在可以將日志寫入新的日志文件。 但是后面的進程對此一無所知,它會從 position 0 寫入日志文件。

靈感來自https://unix.stackexchange.com/a/346196

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM