Ejecutar script antes de reiniciar/apagar

¿Es posible ejecutar un script/comando justo antes de que OS X se apague o reinicie?

Me gustaría ejecutar sudo apachectl stoppara evitar que apache se inicie automáticamente.

Esta pregunta aquí se refiere al apagado/reinicio, la pregunta vinculada en el comentario sobre el cierre de sesión. Estos son escenarios diferentes, así que dejemos las preguntas separadas por el momento.

Respuestas (2)

Puedes usar un gancho de cierre de sesión:

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

El valor de la clave LogoutHook solo puede ser una ruta a un ejecutable y no un comando de shell. El enlace de cierre de sesión se ejecuta con privilegios de superusuario, por lo que no necesita sudo.

El comando predeterminado modifica /var/root/Library/Preferences/com.apple.loginwindow.plist. Agregar una clave LogoutHook a /Library/Preferences/com.apple.loginwindow.plist no funciona.

Si un enlace de cierre de sesión tarda lo suficiente en ejecutarse, se muestra una pantalla gris hasta que finaliza el enlace de cierre de sesión. No parece haber ningún límite de tiempo después del cual los ganchos de cierre de sesión se vean obligados a terminar.

Los ganchos de cierre de sesión quedaron obsoletos en 10.4, pero no he descubierto ninguna forma de ejecutar programas al cerrar sesión de manera confiable con launchd. Tampoco he conseguido que rc.local.shutdown funcione. No conozco ninguna forma de ejecutar un gancho de cierre de sesión antes de apagar o reiniciar, pero no antes de cerrar sesión.

Si desea que Apache deje de iniciarse desde su computadora en el arranque, probablemente desee descargar el .plist apropiado con launchctl:

Abra una terminal, luego
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

quisiste decir /usr/sbin/apachectl?
apachectl stopsolo se ejecuta launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plisten OS X. Consulte cat /usr/sbin/apachectl.
Si bien esto no responde a la pregunta real como se hizo, esta es la mejor solución al problema. Elimine el .plist y apache ya no se iniciará en el arranque.