Limpiar apagar / reiniciar desde el terminal en 10.7+

0

Tengo un sistema sin cabeza que se controla de forma remota que necesito apagar / reiniciar de manera automática (sin el uso de VNC o teclado / mouse local).

El uso de varios comandos a través de SSH o de mi daemon 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 las ventanas de cualquier aplicación en ejecución, aunque todas las siguientes son verdaderas:

  • Cuando cerrar la sesión normalmente, Reopen windows when logging back in está sin marcar
  • Solo el elemento que quiero comenzar con el inicio de sesión aparece en System Preferences > Users & Groups > Login Items .
  • defaults write -g ApplePersistence -bool no está establecido
  • System Preferences > General > Ask to keep changes when closing documents está activado o desactivado
  • System Preferences > General > Close windows when quitting an app está activado o desactivado
  • Recent Items se establece en cualquier valor (no tiene efecto)
  • ~/Library/Preferences/com.apple.loginwindow.plist contiene TALLogoutSavesSate establecido en NO

En mi caso, no puedo usar AppleScript desde 10.7+ (?) advierte cuando otra máquina se comparte en red con AFP o SMBed, lo que provoca un error en el apagado. El comando shutdown 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 al iniciar sesión, y se muestra 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 alguna otra ventana estuviera abierta (Terminal o TextEdit con cambios no guardados) quiero que mi secuencia de comandos de apagado / reinicio obligue a cerrar cualquier aplicación abierta sin guardar y NO abrir en el siguiente inicio de sesión. También preferiría no realizar bucles en todos los procesos de usuario enviando cada uno un SIGTERM o SIGKILL manualmente antes de enviar el comando shutdown .

Estoy totalmente 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, por lo que deseo un reinicio para llevar la máquina a un estado conocido, no al estado en que se encontraba in.

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

    
pregunta hoss 01.04.2016 - 20:17

1 respuesta

1

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

  
  • ~/Library/Preferences/com.apple.loginwindow.plist contiene TALLogoutSavesSate establecido en NO
  •   

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

Eliminar esta matriz, o de forma más contundente todo el archivo, e inmediatamente reiniciar casi completamente el problema.

El problema restante es cuando la máquina se inicia y se restauran todas las ventanas abiertas del Finder y si tiene una o más ventanas de terminal y ejecuta el comando de apagado desde esa ventana, se restablece cuando se reinicia el terminal, pero a través de SSH o un demonio parece funcionar bien.

Realmente no creo que esta sea una solución adecuada a largo plazo, pero hasta ahora en mi pequeña prueba parece funcionar.

después de una investigación adicional, parece que puede conectar un script al inicio de sesión para que siempre elimine el archivo: los valores predeterminados escriben com.apple.loginwindow LoginHook /usr/bin/loginfix.sh

: edite, en la misma línea que la ventana del terminal, parece que cada aplicación individual está guardando su estado, por ejemplo, si abre TextEdit, realiza algunos cambios y luego reinicia la máquina usando el método anterior cuando vuelve a iniciar sesión en e inicie TextEdit usted termina con el documento que tenía abierto. Mirar en ~/Library/Containers/com.apple.TextEdit explica todo

    
respondido por el hoss 01.04.2016 - 20:17

Lea otras preguntas en las etiquetas