В простейшей реализации ротацию логов NGINX можно реализовать следующим образом:
mv access.log access.log.0
kill -USR1 `cat master.nginx.pid`
Мой вопрос. У нас тут проблема с параллелизмом? Я имею в виду, что если NGINX записывает запись журнала между двумя действиями (1) файл был переименован и (2) он получил команду на перезагрузку, могут ли некоторые записи журнала просто потеряны?
Перед отправкой сигнала USR1 подождите 15 секунд, и вы увидите, что * access.log.0 "все еще используется. Это происходит потому, что журнал открыт для записи на основе индексного дескриптора, а не имени файла. Таким образом, это безопасно для одновременного доступа используйте эту технику: mv + USR1