Назад | Перейти на главную страницу

Журнал Upstart не вращается

У меня есть собственный сценарий выскочки, который управляет службой 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: Если вы действительно хотите записать в файл, настройте сценарий ротации журнала на копирование и усечение вместо перемещения файла. Таким образом, исходный дескриптор файла останется доступным, но содержимое будет перемещено в архивный файл.