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

OS-X Leopard Apache запускается не так, как ожидалось

Я пытаюсь запустить драйвер PHP PDO MySQL под Leopard и в основном следую идеям от Том Гидден в принудительном запуске Apache как i386 вместо x86_64 по умолчанию Leopard.

По идеям Тома я скопировал

/System/Library/LaunchDaemons/org.apache.httpd.plist

к

/Library/LaunchDaemons/org.apache.httpd.plist 

И добавил флаг запуска Apache в 32-битном режиме:

<string>arch</string>
<string>-i386</string>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>

Я также подтвердил из Документация Arch что / Library / LaunchDemons следует обрабатывать до / System / Library / LaunchDaemons

Когда я перезагружаю свой Mac и проверяю процесс с помощью монитора активности, процесс httpd помечается как «intel» - это то, что я ожидаю увидеть.

Однако, если я открою Системные настройки-> Совместное использование и перезапущу Apache, сняв и повторно отметив опцию «Общий доступ в Интернет», Apache запустится в 64-битном режиме (как видно в Activity Monitor как процесс «Intel (64-битный)». Это это не то, что я ожидал увидеть!

Итак, мой вопрос:

Спасибо за вашу помощь.

Кто угодно??

Я считаю, что вы можете проверить параметры, фактически переданные приложению, запустив:

ps auxw | grep http

Я знаю, что когда я возился с сервисами, мне очень нравится использовать Лингон (даже если он больше не разрабатывается.) Это дает хорошее представление о том, какие задачи запланированы, это может помочь проверить, активна ли ваша задача или нет, и я считаю, что он проверит согласованность вашего файла plist (хотя, поскольку вы начали с существующего, это, вероятно, будет хорошо), и это действительно хорошо для редактирования файла launchd plist. Обязательно посмотрите на экспертный режим, особенно при просмотре существующего файла, и обратите внимание, что в меню справки вы можете получить доступ ко всем соответствующим страницам руководства.

Вы можете изменить имя своей службы в файле конфигурации plist. Чтобы проверить, доступен ли он и включен, вы можете сделать следующее:

service --test-if-available org.apache.httpd && echo "Available" || echo "Not available"
service --test-if-configured-on org.apache.httpd && echo "On" || echo "Off"

[но замените 'org.apache.httpd' в команде на то, что вы настроили. Обратите внимание, что вы можете запустить

service --list

чтобы увидеть список всех служб, но, к сожалению, данные не поступают в стандартный вывод, и вы не можете их передать по конвейеру.]

Еще один полезный инструмент, который поможет вам в этом разобраться: launchctl.

Чтобы узнать, какие задачи запланированы, вы можете запустить:

launchctl list

Обратите внимание, что вы получите разные результаты, если сделаете это как пользователь, чем если бы вы сделали это как root. Я считаю, что root видит задачи, запланированные из / System / Library / LaunchDaemons и LaunchAgents, и что пользователь видит задачи, запланированные из / Library / LaunchDaemons и LaunchAgents.

Launchctl также позволит вам планировать / отменять задачи. Обратите внимание, что в файлах конфигурации есть ключ, который указывает, отключено ли задание. Вы можете отредактировать файл или, используя команду launchctl load или unload, вы можете использовать флаг -W, чтобы переопределить текущий параметр и записать его обратно на диск.

На сайте, на который вы ссылались, перечислены команды для отмены планирования исходной задачи и расписания в вашей замене следующим образом:

sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
sudo launchctl load /Library/LaunchDaemons/org.apache.httpd.plist

что выглядит правильно (хотя я не уверен, требуется ли sudo для второго).


Почему apache запускается иначе, чем в системных настройках? У меня две догадки.

  1. Он использует / System / Library / LaunchDaemons (и если вы сделаете резервную копию и переопределите ее, вы получите искомые результаты)
  2. Он запускает apache напрямую и не использует launchctl.

Я открыл консоль, переключая переключатель. В system.log ничего не было. В /var/log/apache2/error.log действительно было показано, что приложение было закрыто и запущено, но я не знаю, было ли оно прямым или нет.


Думаю, что бы я сделал:

  • Удалите /Library/LaunchDaemons/org.apache.httpd.plist
  • Сделайте резервную копию /System/Library/LaunchDaemons/org.apache.httpd.plist, возможно, в другую папку
  • Отредактируйте его (и я бы, вероятно, использовал Lingon), чтобы запустить apache в 32-битном режиме
  • Посмотрите, работает ли он при перезагрузке / перезагрузке задачи
  • Посмотрите, работает ли он при включении или отключении веб-обмена
  • Если это сработает, сделайте резервную копию вашей измененной версии файла (на случай, если обновление ОС наступит на нее).

Если вы хотите делать что-то, выходящее за рамки настройки Apple, и хотите постоянный контроль, рассмотрите возможность использования Macports. Это позволит вам полностью контролировать, какую версию Apache, MySQL, PHP вы используете и т. Д.

Одна из проблем, связанных с использованием набора Apache + PHP от Apple, заключается в том, что они могут и будут обновлять его в Обновлении программного обеспечения без особых предупреждений. И это может привести к поломке вашего стека AMP :(