Pulisci arresto / riavvia dal terminale in 10.7+

0

Ho un sistema headless controllato a distanza che ho bisogno di spegnere / riavviare in modo automatico (senza l'utilizzo di VNC o tastiera / mouse locale).

L'utilizzo di vari comandi via SSH o tramite il mio daemon funziona come previsto e riavvia la macchina:

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

Tuttavia, questi comandi fanno sì che il sistema operativo riapra finestre di tutte le applicazioni in esecuzione anche se le seguenti sono tutte vere:

  • Quando esci normalmente, Reopen windows when logging back in è deselezionata
  • Solo l'elemento che desidero iniziare con l'accesso è elencato in System Preferences > Users & Groups > Login Items .
  • defaults write -g ApplePersistence -bool no è impostato
  • System Preferences > General > Ask to keep changes when closing documents è selezionato o deselezionato
  • System Preferences > General > Close windows when quitting an app è selezionato o deselezionato
  • Recent Items è impostato su qualsiasi valore (non ha alcun effetto)
  • ~/Library/Preferences/com.apple.loginwindow.plist contiene TALLogoutSavesSate impostato su NO

Nel mio caso non posso effettivamente usare il applescript dal 10.7+ (?) avverte quando un'altra macchina è condivisa in rete con AFP o SMBed, causando il fallimento dell'arresto. Il comando shutdown forza il riavvio senza aprire una finestra di dialogo che è esattamente ciò di cui ho bisogno. Tuttavia all'avvio della macchina voglio esattamente una applicazione per iniziare al login, ed è elencata negli elementi di login.

La macchina è impostata per accedere automaticamente in modo che questa applicazione possa essere eseguita, ma se sono aperte altre finestre (Terminal o TextEdit con modifiche non salvate) il mio script di spegnimento / riavvio forzerà la chiusura di qualsiasi applicazione aperta senza salvare e NOT aperto al prossimo accesso. Preferisco anche non eseguire il ciclo su tutti i processi utente inviando ognuno a SIGTERM o SIGKILL manualmente prima di inviare il comando shutdown .

Sono pienamente consapevole che ciò potrebbe causare la perdita di dati (se l'utente non ha salvato il proprio documento) ma questa è tipicamente una macchina automatica che voglio che un riavvio porti la macchina a uno stato noto, non lo stato in cui è stata lasciata a.

AFAICT nessuno di questi lavoro per spegnere / riavviare correttamente la macchina in 3.7 +.

    
posta hoss 01.04.2016 - 20:17
fonte

1 risposta

1

Durante la stesura di questa domanda ho fatto una scoperta che potrebbe aiutare gli altri a quasi a risolvere completamente questo problema:

  • ~/Library/Preferences/com.apple.loginwindow.plist contains TALLogoutSavesSate set to NO

Mentre questo è vero, c'è un altro file situato in ~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist che contiene un array chiamato TALAppsToRelaunchAtLogin . Quella matrice contiene un elenco di finestre delle app attualmente aperte.

L'eliminazione di questo array o in modo più diretto dell'intero file e il riavvio immediato hanno risolto quasi completamente il problema.

Il problema che si verifica è quando la macchina avvia tutte le finestre del Finder aperte e se hai avuto una o più finestre di terminale e in realtà hai eseguito il comando shutdown da quella finestra, lo fa ripristinare quando il terminale viene riavviato, ma via SSH o un demone sembra funzionare bene.

Non penso che questa sia una soluzione adeguata a lungo termine, ma finora nei miei piccoli test sembra funzionare.

a seguito di ulteriori ricerche sembra possibile collegare uno script all'accesso in modo da eliminare sempre il file: valori predefiniti scrivi com.apple.loginwindow LoginHook /usr/bin/loginfix.sh

: modifica, lungo la stessa linea della finestra del terminale sembra che ogni singola app stia salvando il suo stato, quindi ad esempio se apri TextEdit, apporta alcune modifiche e poi riavvia la macchina usando il metodo sopra quando fai il log back dentro e avviare TextEdit si finisce con il documento che hai aperto. Guardare in ~/Library/Containers/com.apple.TextEdit spiega tutto

    
risposta data 01.04.2016 - 20:17
fonte

Leggi altre domande sui tag