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

Определение среды выполнения Apache

У меня такая ошибка:

[Mon Dec 05 10:22:23 2011] [warn] mod_rewrite: Running external rewrite maps without defining a RewriteLock is DANGEROUS!
[Mon Dec 05 10:22:23 2011] [error] (13)Permission denied: mod_rewrite: could not start RewriteMap program /etc/httpd/conf.d/upsell_by_id.py

Эта ошибка связана с этой строкой: RewriteMap upsells prg:/etc/httpd/conf.d/upsell_by_id.py

Я понимаю, что это, вероятно, означает, что пользователь, выполняющий apache, не может выполнять эти файлы. Как определить среду выполнения для apache? Как мне сделать этот файл upsell_by_id.py исполняемым для apache?

I get this error when I try to run the upsell_by_id.py as apache:
Traceback (most recent call last):
  File "/etc/httpd/conf.d/upsell_by_id.py", line 8, in <module>
    keyword_groups = pickle.load(open("/home/zumodo/upsell_backup/upsells.pkl", "rb" ) )
IOError: [Errno 13] Permission denied: '/home/zumodo/upsell_backup/upsells.pkl'

И это несмотря на то, что файл upsells.pkl, похоже, имеет все необходимые разрешения:

-rwxrwxrwx.  1 skline skline 6.4M Dec  5 08:50 upsells.pkl

На самом деле у вас там две ошибки. Разрешения одни в первую очередь:

Apache потребуются соответствующие разрешения в каждом из каталогов, ведущих к upsells.pkl файл, а также сам файл.

Попробуйте это, чтобы определить, какие разрешения имеют каталоги (обратите внимание, что пробелы важны):

ls -ld /home/ /home/zumodo/ /home/zumodo/upsell_backup/

Пользователю Apache понадобится x разрешение на каждый из этих каталогов. /home обычно имеет необходимые разрешения, но это обычное дело для всего в /home/* иметь режим 750 (rwxr-x---) или даже в режиме 700 (rwx ------). Любой из них может вызвать вашу проблему. Проблема с разрешениями может быть связана с upsell_backup каталог.

Переместите upsells.pkl файл на более подходящий путь (например, /var/www/) или измените разрешения для ограниченного каталога.

Сообщение об ошибке RewriteLock правильно; отсутствие одного опасно.

Apache является либо многопоточным, либо порождает несколько дочерних узлов, что означает, что любые два из них могут получать запросы одновременно. RewriteLock используется внутри Apache, чтобы гарантировать, что только один дочерний элемент или поток общается с внешним процессом одновременно. Если вы не укажете один, выходные данные программы могут смешаться вместе, что полностью испортит ваши правила перезаписи и, возможно, весь ваш сервер. Наиболее вероятный результат - когда ваш сервер будет занят, вы сгенерируете много 500 ответы. Возможны значительно худшие результаты.

На время отключить RewriteMap upsells строка и посмотрите, запускается ли apache или нет. Если он запускается, проверьте, что пользователь запускает apache.

Выполните следующую команду.

ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {print $1}'

Эта команда предоставит вам пользователя, на котором запущен сервер Apache. Затем проверьте право собственности и права доступа к файлу. Я думаю, что файл должен быть исполняемым для пользователя, запускающего процесс apache / httpd.

Затем с помощью следующей команды установите соответствующие разрешения и права собственности на файл.

chown root.apache /etc/httpd/conf.d/upsell_by_id.py

chmod +x /etc/httpd/conf.d/upsell_by_id.py