cómo hacer que los scripts de shell se ejecuten al inicio en Yosemite

20

Hay un directorio en Sistema / Biblioteca para los elementos de inicio que supongo: StartupItems

Necesito tener un script de shell que configure la interfaz de Ethernet en el inicio, con la dirección de red local y la máscara de subred. Necesito hacer esto porque el Las preferencias de red para configurar la interfaz de Ethernet NO lo establecerán utilizando los ajustes manuales. ESTO parece ser un error serio, o mi instalación es malo.

Me dieron el consejo de usar networksetup desde la línea de comandos, pero eso no configurará la interfaz de Ethernet de tal manera que las configuraciones estarán allí al reiniciar.

El script debe hacer su trabajo con privilegios de root o con sudo, pero yo Estoy asumiendo que si usa sudo, se presentará un diálogo de contraseña en el momento del arranque cuando el proceso de arranque llega a ese script.

(He tenido suficiente experiencia con FreeBsd y Linux para encontrar mi camino en el terminal, pero no necesariamente como se aplica a Mac OSX)

    
pregunta JeffK 14.11.2014 - 02:17

3 respuestas

17

Una forma de hacerlo sería asignándole al script un servicio launchd:

Crea el script de shell como de costumbre. Luego puedes hacer un servicio launchd para ejecutarlo al inicio. Esos están ubicados en /Library/LaunchDaemons . Estos están en el formato de lista de propiedades XML. Crea otro y rellénalo con algo como esto:

<?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>

Cambie com.example.app , /bin/sh y /path/to/script según sea necesario.

La secuencia de comandos se ejecutará mientras el sistema se está iniciando. Si se ejecuta demasiado pronto, puede escribir la secuencia de comandos para intentar hacer lo que debe hacer hasta que tenga éxito, o hacer que salga con un código de error distinto de cero y agregarlo a la lista de propiedades antes de la línea </dict> :

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

Para obtener más información sobre los servicios y demonios de lanzamiento de OS X, sugiero buscar aquí para obtener una buena referencia rápida sobre cómo crearlos, o here para una referencia más completa sobre lo que puede hacer launchd.

    
respondido por el andonuts 14.11.2014 - 05:19
16

Hace algún tiempo utilicé cron para hacer precisamente eso. Puedes hacer una entrada como esta

@reboot /path/to/my/script

Más información aquí

  

En lugar de los primeros cinco campos, puede aparecer una de las ocho cadenas especiales:

       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 * * * *".
    
respondido por el sjosen 24.01.2015 - 19:40
-3

Eche un vistazo al script de enlace de inicio de sesión.

enlace

    
respondido por el Clicpomme 08.10.2015 - 15:09

Lea otras preguntas en las etiquetas