Практическое задание

Эта задача — шаг 14 курса «Эксплуатация сервера»

Лог воркера очереди съел диск

средне~8 мин

Лог воркера очереди /var/log/queue/worker.log разросся до 30 МБ. Воркер держит файл открытым, перезапускать его нельзя. Срочно обнули лог, не удаляя и не пересоздавая файл, а на будущее создай конфиг /etc/logrotate.d/queue-worker: ротация по размеру, а раз воркер не умеет переоткрывать лог — через copytruncate.

Что потренируешь:
  • truncate
  • inode
  • logrotate
  • copytruncate
  • открытые дескрипторы

Разбор темы

Процесс, открывший файл, пишет в inode, а не в имя: если удалить лог и создать новый, воркер продолжит писать в удалённый файл, и место не вернётся до перезапуска. Поэтому срочно освобождают место обрезкой того же файла до нуля — truncate -s 0 или перенаправлением пустоты, inode при этом не меняется. На будущее ротацию поручают logrotate: блок в /etc/logrotate.d/ описывает путь, порог size и число копий rotate. Обычная ротация переименовывает файл, и программа без поддержки переоткрытия лога продолжит писать в старый; директива copytruncate вместо этого копирует содержимое и обрезает исходный файл на месте.

Что проверяется

  1. лог обнулён
  2. файл обнулён, а не пересоздан
  3. logrotate: ротация по размеру с copytruncate
  4. конфиг logrotate без ошибок

Как это выглядит