(daemon = Hintergrunddienst, Windows: Systemdienste/services)
launchd (Apple) startet den mitgelieferten httpd. In /System/Library/LaunchDaemons/ wird dazu ein httpd-wrapper gestartet. Das ist ein Ruby-File, das den 'eingebauten' Apache-Server startet. (https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html):
The launchd Startup Process
After the system is booted and the kernel is running, launchd is run to finish the system initialization. As part of that initialization, it goes through the following steps:
It loads the parameters for each launch-on-demand system-level daemon from the property list files found in /System/Library/LaunchDaemons/ and /Library/LaunchDaemons/.
launchctl ist wiederum das Interface zu launchd.
(Auf Ubuntu wurde httpd auf apache2 umgetauft; entspricht dem Package-Namen)
Der Befehl httpd
erlaubt direkten Zugriff auf den Daemon (erfordert aber auch, alle Optionen vollständig und korrekt zu spezifizieren).
apachectl
(Apache HTTP Server Control Interface: http://httpd.apache.org/docs/2.2/programs/apachectl.html) ist ein Skript-Wrapper um httpd, um ein einfaches (und aufs System maßgeschneidertes) Starten, Stoppen, Reloaden und den Statusbericht zu ermöglichen.
apachectl configtest = http -t
apachectl -V = http -V
(apachectl am Mac ist ein launchctl Wrapper?) [https://serverfault.com/a/298003]
Es stehen diese Apache-Server-Prozesse zur Verfügung:
-
der 'eingebaute' (bundled)
unter /usr/sbin/apachectl (is installed by default in OSX; and, probably not a good idea to delete it. https://superuser.com/a/595667)
zu stoppen / aus den Hintegrunddiensten (/System/Library/LaunchDaemons/org.apache.httpd.plist) zu entfernen mit: https://superuser.com/questions/986775/how-can-i-remove-apache2-that-i-have-installed-in-mac-os-x
default httpd.conf: https://gist.github.com/johnfoderaro/14021081b659bca5848df003de577a11 -
mit homebrew
brew info httpd
: abgelegt im Verzeichnis ../Cellar/httpd/2.4.29_1/bin/httpd
httpd im Verzeichnis /usr/local/bin ist der Symlink auf ../Cellar/httpd/2.4.29_1/bin/httpd -
ev. MAMP-'Scherzchen'...
UPDATE: macOS HighSierra kommt mit PHP7 und einem gut funktionierenden apachectl . Wichtige Infos: s. https://websitebeaver.com/set-up-localhost-on-macos-high-sierra-apache-mysql-and-php-7-with-sslhttps
--> Sites http://localhost/~johannes/site-name/
which apachectl
: apachectl im Path des Users -- wird verwendetwhereis apachectl
: apachectl standard binary directory
apachectl -V
Bsp. homebrew: SERVER_CONFIG_FILE="/usr/local/etc/httpd/httpd.conf"
Die Konfiguration der virtuellen Hosts ist dann unter "./extra/httpd-vhosts.conf"
Der eingebaute Apache-Server ist m.E. auch nicht mit
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
zu stoppen.
(s. https://getgrav.org/blog/macos-monterey-apache-multiple-php-versions).
Damit der Befehl überhaupt funktioniert, darf der MacOS-eigene Server übrigens nicht vorher mit sudo apachectl stop
abgedreht werden.
Um den mit Homebrew installierten Server den Vorzug zu geben, ist es wichtig, dass der (neue) Homebrew-Pfad (/opt/homebrew/bin/
) im PATH vor dem PATH des MacOS-Servers (/usr/sbin/apachectl) steht.
.zshrc
export PATH="$HOME/bin:$PATH"
export PATH="/opt/homebrew/bin:$PATH"
Dann greifen nämlich apachectl
und httpd
auf die Hombrew-Version zu.
Listen kann man alle gleichnamigen Prozesse mit
which -a apachectl
,
den tatsächlich verwendeten mit which apachectl
.
Kurioserweise zeigt brew services list
einen error bei httpd, auch wenn der Server läuft.
Damit der Server auch nach einem Reboot läuft, muss, glaube ich, das Service mit sudo
gestartet werden (sudo brew services start httpd
), eine reguläres brew services start
dürfte sich auf den User-Login-Fall beziehen.
Das ist bei HighSierra nicht mehr der Fall, s. UPDATE oben.
https://mallinson.ca/osx-web-development/
Weiterführende Infos: Nemeth et al.: Unix and Linux System Administration Handbook, 5th ed., p.696 ff