come ottenere gli script della shell da eseguire all'avvio su Yosemite

20

C'è una directory in System / Library per gli elementi di avvio che presumo: StartupItems

Ho bisogno di uno script di shell che configurerà l'interfaccia ethernet all'avvio, con indirizzo di rete locale e maschera di sottorete. Ho bisogno di farlo perché il le preferenze di rete per la configurazione dell'interfaccia ethernet NON lo imposteranno usando le impostazioni manuali. Questo sembra essere un bug grave, o la mia installazione è cattivo.

Mi è stato dato il consiglio di usare networksetup dalla riga di comando ma quello non configurerà l'interfaccia ethernet in modo tale che le configurazioni saranno lì al riavvio.

Lo script deve fare il suo lavoro con i privilegi di root, o con sudo, ma io presumo che se usi sudo, ci sarà una finestra di dialogo della password presentata al momento dell'avvio quando il processo di avvio arriva a quello script.

(Ho avuto abbastanza esperienza con FreeBsd e Linux per orientarmi nel terminale, ma non necessariamente come si applica a Mac OSX)

    
posta JeffK 14.11.2014 - 02:17
fonte

3 risposte

17

Un modo per farlo sarebbe assegnare allo script un servizio launchd:

Crea lo script della shell come al solito. Quindi è possibile creare un servizio launchd per eseguirlo all'avvio. Questi si trovano a /Library/LaunchDaemons . Questi sono nel formato elenco proprietà XML. Creane un altro e compilalo con qualcosa di simile:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.example.app</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>/path/to/script</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
    </dict>
</plist>

Modifica com.example.app , /bin/sh e /path/to/script come richiesto.

Lo script verrà quindi eseguito mentre il sistema è in fase di avvio. Se viene eseguito troppo presto, puoi scrivere lo script per provare a fare ciò che deve fare fino a quando non riesce, oppure farlo uscire con un codice di errore diverso da zero e aggiungerlo all'elenco delle proprietà prima della riga </dict> :

<key>KeepAlive</key>
<dict>
     <key>SuccessfulExit</key>
     <false/>
</dict>

Per ulteriori informazioni sui daemon e sui servizi di lancio di OS X, suggerisco di cercare qui per un rapido riferimento su come renderli, o qui per un riferimento più completo su ciò che launchd può fare.

    
risposta data 14.11.2014 - 05:19
fonte
16

Qualche tempo fa ho usato cron per fare proprio questo. Puoi creare una voce come questa

@reboot /path/to/my/script

Maggiori informazioni qui

Instead of the first five fields, one of eight special strings may appear:

       string          meaning
       ------          -------@reboot ------@reboot
       @reboot         Run once, at startup.
       @yearly         Run once a year, "0 0 1 1 *".
       @annually       (same as @yearly)
       @monthly        Run once a month, "0 0 1 * *".
       @weekly         Run once a week, "0 0 * * 0".
       @daily          Run once a day, "0 0 * * *".
       @midnight       (same as @daily)
       @hourly         Run once an hour, "0 * * * *".
    
risposta data 24.01.2015 - 19:40
fonte
-3

Dai un'occhiata allo script di hook di accesso.

link

    
risposta data 08.10.2015 - 15:09
fonte

Leggi altre domande sui tag