我很新的殼在Linux上,在我的Linux實例,我重定向程序的兩個文件的輸出和錯誤使用以下方式編程,並在後臺Linux中的IO重定向Bash shell腳本不重新創建移動/刪除的文件?
myprog > run.log 2>> err.log &
這正常運行它,我得到我想要的行爲
現在有一個又一個後臺進程監視RUN.LOG和err.log,並將它們移動到其他文件名,如果日誌文件增長超過一定的閾值。
例如mv err.log err[date-time].log
我的期望是,在這個文件移動發生後,err.log將被myprog輸出重定向再次創建,並且新的輸出將被寫入該新文件。但是,在我的日誌文件監視過程移動文件後,err.log或run.log永遠不會再次創建,儘管myprog繼續運行時沒有任何問題。
這是Linux中的正常行爲嗎?如果是這樣,我該怎麼做才能讓我的預期行爲起作用?
文件句柄綁定到inode,而不是文件名。文件系統上的哪個名稱(如果有)與inode鏈接的更改是完全透明的。這是非常理想的行爲 - 這就是爲什麼,例如,您可以在該軟件正在使用時在類UNIX操作系統上升級軟件包。 –