Führen Sie das Skript vor dem Neustart/Herunterfahren aus

Ist es möglich, ein Skript/einen Befehl direkt vor dem Herunterfahren oder Neustarten von OS X auszuführen?

Ich möchte ausführen, sudo apachectl stopum zu verhindern, dass Apache automatisch gestartet wird.

mögliches Duplikat von Skript/App beim Abmelden ausführen
Diese Frage hier fragt nach dem Herunterfahren/Neustart, die im Kommentar verlinkte Frage nach dem Abmelden. Dies sind verschiedene Szenarien, also lassen wir die Fragen für den Moment getrennt.

Antworten (2)

Sie können einen Logout-Hook verwenden:

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\napachectl stop' > ~/.logouthook
chmod +x ~/.logouthook

Der Wert des LogoutHook-Schlüssels kann nur ein Pfad zu einer ausführbaren Datei und kein Shell-Befehl sein. Der Logout-Hook wird mit Superuser-Rechten ausgeführt, sodass Sie sudo nicht benötigen.

Der Standardbefehl ändert /var/root/Library/Preferences/com.apple.loginwindow.plist. Das Hinzufügen eines LogoutHook-Schlüssels zu /Library/Preferences/com.apple.loginwindow.plist funktioniert nicht.

Wenn die Ausführung eines Logout-Hooks lange genug dauert, wird ein grauer Bildschirm angezeigt, bis der Logout-Hook beendet wird. Es scheint kein Zeitlimit zu geben, nach dem Logout-Hooks beendet werden müssen.

Abmelde-Hooks waren in 10.4 veraltet, aber ich habe keine Möglichkeit gefunden, Programme beim Abmelden zuverlässig mit launchd auszuführen. Ich habe rc.local.shutdown auch nicht zum Laufen gebracht. Ich kenne keine Möglichkeit, vor dem Herunterfahren oder Neustarten einen Abmelde-Hook auszuführen, aber nicht vor dem Abmelden.

Wenn Sie möchten, dass Apache beim Booten nicht mehr von Ihrem Computer startet, möchten Sie wahrscheinlich die entsprechende .plist mit launchctl entladen:

Öffnen Sie dann ein Terminal
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

meinst du /usr/sbin/apachectl?
apachectl stopläuft nur launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plistunter OS X. Siehe cat /usr/sbin/apachectl.
Dies beantwortet zwar nicht die eigentlich gestellte Frage, ist aber die beste Lösung für das Problem. Entfernen Sie die .plist und Apache startet nicht mehr beim Booten.