Заметка о “premature script headers” или “Читай доки до просветления!”

Размышляя о блоге, подумал, что неплохо было бы настроить на серваке обработку perl и cgi скриптов. Задача нетривиальная, решается буквально за несколько минут, конечно, при должном уровне знаний. Благо знания есть, но как оказалось, это всего лишь необходимое условие, но не достаточное, чтобы выполнить ту или иную задачку. Итак, обо всем по порядку.

Излагать буду с позиции новичка, так что все претензии > /dev/null. Ось LInux, perl стоит как интерпретатор в /usr/bin/perl. Первым делом подправил конфиг апача и в виртуальный хост добавил нужные директивы, все по докам с оффсайта (http://httpd.apache.org/docs/2.0/howto/cgi.html). Сделал рестарт апачу и в папку cgi-bin для теста кинул простейший perl скрипт, который выводит “ok”. Скрипт рабочий, на других серваках отрабатывал нормально. Запускаю – апач отваливается с 500 ошибкой. Ну, думаю, сейчас посмотрим логи и выясним, что за дела. Иду в логи и вижу преславутую запись “Premature end of script headers“. Вот тут то и встал в ступор. Headers в начале скрипта прописаны, перенос строки в стиле unix систем, путь до perl правильный. Все, что знал о данной ошибки к моему скрипту не имело отношения, все условия выполнялись. Попробовал запустить скрипт прямо на шелле, все гуд, отрабатывает. Пришлось лезть в google, искать, в чем же причина такого поведения сервера, но наткнулся лишь на известные мне ошибки, исправив которые, у людей скрипты начинали работать. Совсем не мой случай. Прошел день, но я так и не выяснил в чем же моя проблема (начали подступать мысли о проблеме в днк :). На второй день зарегился на форуме бородатых сисадминов и спросил совета там. Обсуждение пошло по такому направлению, что нужно протестить запуск скрипта в шелле от юзера апача. Процесс осбуждения ни к чему не привел и я опять закинул запрос в гугл в надежде отыскать хотя бы намек на то, что за х… творится у меня :) Наткнулся на FAQ об апаче 1.3 (у меня 2.0.59), в котором мельком проскользнула мессага о том, что причина ошибки может заключаться в директивах RLimitCPU и RLimitMEM, которые могут ограничивать ресурсы, которые юзаются апачем. Вспомнил, что недавно игрался с RLimitMEM и выставил небольшое значение, чтобы апач не шиковал. Закомментировал директиву, перезапустил апач и О, чудо! Мой скриптек вывел “OK”, все заработало. Отписался на форуме о том, что нашел решение проблемы и меня ткнули носом в оффициальную документацию по апачу, там действительно было описание данной проблемы (http://httpd.apache.org/docs/1.3/misc/FAQ.html#premature-script-headers). Вот так. Из всего выше сказанного, для себя сделал вывод, что прежде чем впадать в панику, нужно досконально изучить документацию, а если и там ничего не находится, то опять с еще большим старанием изучить документацию, чтобы наконец таки понять, что если есть инструкции, то их _обязательно_ нужно прочесть. Не повторяйте моих ошибок, удачи!

Куча времени? Листай дальше:
  • Apache2 + PHP5 + MySQL5 + Perl на Windows (Часть I)
  • Apache2 + PHP5 + MySQL5 + Perl на Windows (Часть II)
  • РаССказать о себе
  • Удаленный код в разных движках
  • Руководство для повышения рейтинга блога:2
  • Отправить коммент в фонд голодающих пингвинов

    Прикрепить файл

    Если есть желание, то можете прикрепить к комменту изображение\файл. Если вы девочка, то с радостью посмотрю на вашу прикрепленную к коменту фотку (: