У меня есть собственный сценарий выскочки, который управляет службой API узла. Этот скрипт передает вывод в /var/log/upstart/api-access.log
. Я все время вижу, что старый журнал архивируется в api-access.log.1.gz
, но новый api-access.log
файл не создан.
Есть идеи, почему это может происходить, или что я могу сделать, чтобы все исправить?
Часть сценария моего файла выскочки выглядит так:
script
chdir /opt/www/api
exec sudo -u www-data NODE_ENV=production npm start >> /var/log/upstart/api-access.log
end script
Когда /var/log/upstart/api-access.log архивируется, ссылка на исходную файловую систему удаляется, однако индексный дескриптор остается в том виде, в котором он удерживается процессом exec-ed. Процесс продолжает запись в этот индексный дескриптор, даже если на него нет ссылки, и будет продолжать делать это, пока процесс не будет перезапущен.
Если нет особой причины, по которой вы перенаправляете этот вывод в этот файл, вам следует избегать этого. Upstart все равно записывает весь вывод в файл в / var / log / upstart, названный в честь сценария выскочки. Он также повторно открывает файл при каждой записи, поэтому файл создается заново, если он был удален при ротации журнала.
Редактировать JennyD: Если вы действительно хотите записать в файл, настройте сценарий ротации журнала на копирование и усечение вместо перемещения файла. Таким образом, исходный дескриптор файла останется доступным, но содержимое будет перемещено в архивный файл.