0 votos

Apagado/reinicio limpio desde el terminal en 10.7+

Tengo un sistema headless controlado remotamente que necesito apagar/reiniciar de forma automatizada (sin usar VNC o teclado/ratón local).

El uso de varios comandos a través de SSH o a través de mi demonio funciona como se espera y reinicia la máquina:

sudo shutdown -r now o osascript -e 'tell application "System Events" to restart'

Sin embargo, estos comandos hacen que el sistema operativo vuelva a abrir Windows de cualquier aplicación que se esté ejecutando:

  • Al cerrar la sesión normalmente Reopen windows when logging back in es No se ha comprobado
  • Sólo el elemento que quiero iniciar con el inicio de sesión aparece en System Preferences > Users & Groups > Login Items .
  • defaults write -g ApplePersistence -bool no se establece
  • System Preferences > General > Ask to keep changes when closing documents es marcado o no marcado
  • System Preferences > General > Close windows when quitting an app es marcado o no marcado
  • Recent Items se establece en cualquier valor (no tiene efecto)
  • ~/Library/Preferences/com.apple.loginwindow.plist contiene TALLogoutSavesSate ajustado a NO

En mi caso no puedo usar el applescript ya que 10.7+(?) avisa cuando otra máquina está compartida en red con AFP o SMBed haciendo que el apagado falle. El shutdown El comando fuerza el reinicio sin que aparezca un diálogo, que es exactamente lo que necesito. Sin embargo, cuando la máquina se inicia, quiero que se inicie exactamente una aplicación en el inicio de sesión, y aparece en los elementos de inicio de sesión.

La máquina está configurada para iniciar sesión automáticamente para que esta aplicación pueda ejecutarse pero si cualquier otro Windows estuviera abierto (Terminal o TextEdit con cambios no guardados) quiero que mi apagado/reinicio script fuerce el cierre de cualquier aplicación abierta sin guardar y NO abierto en el siguiente inicio de sesión. También preferiría no hacer un bucle for a través de todos los procesos de usuario enviando a cada uno un SIGTERM o SIGKILL manualmente antes de enviar el shutdown comando.

Soy plenamente consciente de que esto puede causar la pérdida de datos (si el usuario no guardó su documento) pero esto es típicamente una máquina desatendida que quiero un reinicio para llevar la máquina a un estado conocido, no el estado en que se dejó.

AFAICT ninguno de estos trabajo para apagar/reiniciar limpiamente la máquina en 3.7+.

1voto

Carlos Barbosa Puntos 1374

Mientras escribía esta pregunta hice un descubrimiento que podría ayudar a otros casi resolver completamente este problema:

  • ~/Library/Preferences/com.apple.loginwindow.plist contiene TALLogoutSavesSate ajustado a NO

Si bien esto es cierto, hay otro archivo ubicado en ~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist que contiene un array llamado TALAppsToRelaunchAtLogin . Esa matriz contiene una lista de las aplicaciones Windows actualmente abiertas.

Borrando esta matriz, o de forma más contundente todo el archivo, y reiniciando inmediatamente se arregló casi por completo el problema.

El problema restante es que cuando la máquina se inicia cualquier ventana abierta del Finder se restaura y si tenías una o más ventanas de terminal y ejecutabas el comando de apagado desde esa ventana hace que se restaure cuando se inicia de nuevo el Terminal, pero a través de SSH o un demonio parece funcionar bien.

Realmente no creo que sea una solución adecuada a largo plazo, pero hasta ahora en mis pequeñas pruebas parece funcionar.

Investigando un poco más parece que se puede enganchar un script en el inicio de sesión para que siempre borre el archivo: defaults write com.apple.loginwindow LoginHook /usr/bin/loginfix.sh

En cuanto a la edición, en la misma línea que la ventana de terminal, parece que cada aplicación individual está guardando su estado, así que, por ejemplo, si abres TextEdit, haces algunos cambios y luego reinicias la máquina utilizando el método anterior, cuando vuelves a iniciar sesión y arrancas TextEdit, terminas con el documento que tenías abierto. Mirando en ~/Library/Containers/com.apple.TextEdit lo explica todo

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X