Запуск OS-X Leopard Apache работает не так, как ожидалось
Я пытаюсь настроить драйвер MySQL PHP PDO и запустить его под Leopard, и я в основном следую идеям Тома Гиддена о том, чтобы заставить Apache работать под i386 вместо Leopard по умолчанию x86_64.
В соответствии с идеями Тома я скопировал
/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 и проверяю процесс с помощью Activity Monitor, процесс httpd помечается как "intel", что я и ожидаю увидеть.
Однако если я открою Системные настройки-> Общий доступ и перезапущу Apache, сняв флажок и перепроверив опцию "Общий веб-доступ", Apache запустится в 64-битном режиме (как в Activity Monitor как процесс "Intel (64-битный)". это не то, что я ожидал увидеть!
Итак, мой вопрос:
Почему я вижу, что запуск Apache через Системные настройки приводит к другому поведению, чем при перезагрузке?
Должен ли я удалить / переименовать файл /System/Library/LaunchDaemons/org.apache.httpd.plist или есть лучший способ сделать это?
Или я просто делаю вещи просто сумасшедшим образом?
Спасибо за вашу помощь.
Кто-нибудь??
2 ответа
Если вы хотите сделать что-то за пределами настройки Apple и хотите получить постоянный контроль, подумайте об использовании Macports. Это позволит вам полностью контролировать, какую версию Apache, MySQL и PHP вы используете и т. Д.
Одна из проблем, связанных с использованием Apple Apache + PHP, заключается в том, что они могут и будут обновлять его в обновлении программного обеспечения без особого предупреждения. И это может привести к поломке вашего стека AMP:(
Я считаю, что вы можете проверить параметры, фактически переданные в приложение, запустив:
ps auxw | grep http
Я знаю, что когда я работаю со службами, мне очень нравится использовать Lingon (хотя он больше не разрабатывается активно). Он дает хорошее представление о том, какие задачи запланированы, он может помочь проверить, что ваша задача настроена на активную работу. или нет, и я считаю, что он проверит согласованность вашего 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 запускается не так, как системные настройки? У меня есть две догадки.
- Он использует /System/Library/LaunchDaemons (и если вы скопируете это и переопределите его, вы получите результаты, которые вы ищете)
- Он запускает 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-битном режиме
- Посмотрите, работает ли это при перезагрузке / перезагрузке задачи
- Посмотрите, работает ли он при включении или отключении общего доступа
- Если это сработает, создайте резервную копию измененной версии файла (на тот случай, если обновление ОС остановится).