L'arresto dallo script di launchd non funziona più su Yosemite

-1

Sono nuovo in questo forum; per favore scusa qualsiasi passo falso. Sto usando rsync licenziato da un LaunchDaemon scritto in tcsh da diversi anni. Ha funzionato benissimo sul mio MacBook Pro 2008 con Snow Leopard. Ora ho un MBP 2014 con Yosemite. Ho chiarito alcuni conflitti, ma uno continua a sfuggirmi. Il mio script funziona così:

  1. Monta un disco esterno.
  2. launchd avvia il mio script
  3. Il mio script verifica che sia disponibile l'unità giusta.
  4. La mia sceneggiatura copia alcune cartelle dal computer di mia moglie alla mia e dalla mia alla sua.
  5. Il mio script invia un comando shutdown al computer di mia moglie.
  6. Il mio script copia alcune cartelle dal nostro computer di backup su mine e miniere.
  7. Il mio script invia un comando shutdown al nostro computer di backup.
  8. Il mio script copia alcune cartelle dal mio computer sul disco esterno.
  9. Il mio script invia un comando shutdown al mio computer.

    Come ho detto, questo ha funzionato bene per diversi anni sotto Snow Leopard. Ora che eseguo Yosemite, i passaggi 4, 6 e 8 falliscono apparentemente senza generare errori. Nello script originale, ho usato osascript per lanciare un Applescript che ha controllato alcune cose e poi ha detto a System Events di spegnere il computer. Quando questo non funzionava in Yosemite, passai a un semplice comando shutdown -h +1 direttamente nello script tcsh . Questo ha reso il passaggio 8 funzionare correttamente, ma non ha fatto nulla per i passaggi 4 e 6. Idealmente, vorrei tornare al comando Applescript shutdown perché sembra più pulito: le applicazioni hanno la possibilità di chiudere o addirittura annullare l'arresto, se necessario .

    Un altro punto che dovrei fare è che sto usando ssh -f nell'utente root sugli altri due computer per inviare i comandi shutdown . Ho impostato i computer con le chiavi RSA del mio computer per abilitare un accesso senza password, quindi il comando corrente è solo ssh -f [email protected] 'shutdown -h +1' .

    Ho confermato che funziona su ssh sul computer di mia moglie e lo spengo manualmente. È solo lo script che non spegne l'altro computer.

    Qualcuno ha idea del perché questo non funziona in Yosemite. Ancora più importante, qualche idea su come farlo funzionare? Mi piacerebbe essere in grado di impostare il backup in esecuzione e poi andare a letto sapendo che i computer si spengono quando il processo è completato.

Grazie in anticipo.

    
posta Uniquark 31.01.2015 - 03:19
fonte

1 risposta

0

Penso di aver trovato la causa del problema, o almeno una presunta spiegazione e un modo per fare ciò che voglio.

Si scopre che la chiusura del computer sembra essere semplicemente proibita da un demone. Immagino che Apple ritenga che si tratti di una sorta di rischio per la sicurezza, ma non ho trovato alcuna informazione al riguardo. L'unica cosa che ho trovato è stata un commento che i demoni non sono autorizzati a lanciare una GUI con un link a Mac Libreria per sviluppatori, demoni e agenti . Per quello che vale, devo essermi sbagliato quando ho scritto che il passaggio 8 ha funzionato quando ho usato shutdown -h +1 perché dovevo usare questa altra soluzione in tutti e tre i passaggi di spegnimento.

Quindi, la soluzione sembra essere che ho bisogno di un agente per controllare un segnale dal mio daemon per spegnere il computer. Sto eseguendo lo script principale come un demone perché ha bisogno di un accesso root per copiare file da diversi utenti. L'agente è in esecuzione su ogni computer che dovrà essere spento e lo script principale verrà eseguito sul mio computer. Quando lo script principale viene eseguito con un particolare computer, invia il segnale per spegnere quel computer, incluso il mio computer quando lo script principale è finito.

Sono sicuro che ci sono modi migliori per farlo, ma la mia conoscenza di Unix e scripting è molto discutibile, quindi ho semplicemente impostato l'agente per vedere una particolare cartella in cui mostrare un determinato file. Quando viene visualizzato quel file, l'agente elimina il file ed esegue il comando osascript per spegnere il computer. Quindi, il segnale inviato dallo script principale è semplicemente touch / Shutdown / Now. È complicato, ma funziona abbastanza bene per me.

    
risposta data 03.02.2015 - 22:47
fonte

Leggi altre domande sui tag