Это очень тесно связано с работой файловых систем POSIX.Когда вы переименовываете файл, изменяется только имя файла, физический файл на диске не изменится.Кроме того, после открытия файла процесс, использующий этот файл, имеет только ссылку (через несколько слоев) на физический файл на диске, имя используется только при открытии файла.
Это означает, что программаA все равно будет записывать в тот же файл, который теперь имеет новое имя (например, test.log.1
в вашем примере).
Распространенным решением этой проблемы является передача программой ротации журналов сигнала (например, SIGHUP
или SIGUSR1
или аналогичный) к процессу.Процесс обнаружит этот сигнал и затем снова откроет запись в журнал, чтобы использовать новый файл.