Принудительное уведомление о создании файла в FAM или lighttpd

Среда: Debian, lighttpd, fam. Неясно, включено ли ядро ​​виртуального частного сервера Dnotify или нет.

После того, как мой CGI создает файл в файловой системе, он отвечает на короткое сообщение клиенту, в браузере запускается java-скрипт, уведомляющий клиента о том, что файл готов к загрузке. Здесь есть одна проблема - большую часть времени клиент получает http 404 ошибка от lighttpd, особенно когда все эти программы работают на localhost. Я думаю, что эта проблема вызвана задержкой lighttpd, уведомляемой fam о создании файла. Я представляю, что все события происходят в следующей последовательности:

  1. CGI создает файл.
  2. CGI отвечает клиенту.
  3. клиент получает файл из lighttpd.
  4. lighttpd не находит файл в своем кеше.

Я могу себе представить, что такая проблема будет хуже, когда файл будет создан на удаленном хосте и получит уведомление от lighttpd через NFS.

Мой вопрос: как код CGI, чтобы сообщить lighttpd о создании файла, прежде чем ответить клиенту?

То есть как "вставить" шаг уведомления между шагами выше 1. а также 2.? Если я не могу сделать это с помощью lighttpd, но я могу сделать это с помощью nginx, я могу также рассмотреть возможность перехода на последний вариант. Точно так же я буду в порядке, чтобы переключиться с fam на другие мониторы чередования файлов.

С уважением,

1 ответ

Решение

lighttpd не кэширует отсутствие файла, поэтому проблема скорее всего в вашем CGI-скрипте. Сценарий CGI должен создать файл и закрыть его, чтобы ядро ​​знало, что содержимое должно быть сброшено на диск, так как они все еще могут буферизоваться в stdio в процессе CGI. Только после этого скрипт должен отправить сообщение клиенту.

Как вы заметили, дополнительные шаги требуются, если CGI запускается на сервере, отличном от того, который получает второй запрос на файл, и файл хранится в NFS или другой удаленной файловой системе. Самое простое решение - заставить клиента подождать секунду или две и повторить попытку загрузки файла несколько раз, поскольку типичные настройки кэширования NFS составляют около 5 секунд.

Другие вопросы по тегам