Hay un directorio en System/Library para elementos de inicio, supongo: StartupItems
Necesito tener un script de shell que configure la interfaz ethernet al inicio, con dirección de red local y máscara de subred. Necesito hacer esto porque las preferencias de red para configurar la interfaz ethernet NO la configurarán usando la configuración manual. ESTO parece ser un error grave, o mi instalación es mala.
Me dieron el consejo de usar la configuración de red 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.
La secuencia de comandos debe hacer su trabajo con privilegios de root o con sudo, pero asumo que si usa sudo, se presentará un cuadro de diálogo de contraseña en el momento del arranque cuando el proceso de arranque llegue a esa secuencia de comandos.
(He tenido suficiente experiencia con FreeBsd y Linux para orientarme en la terminal, pero no necesariamente como se aplica a Mac OSX)
Una forma de hacerlo sería asignarle al script un servicio de lanzamiento:
Cree el script de shell como de costumbre. Luego puede crear un servicio de lanzamiento para ejecutarlo al inicio. Esos están ubicados en /Library/LaunchDaemons
. Estos están en formato de lista de propiedades XML. Cree otro y rellénelo 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>
Cambiar com.example.app
, /bin/sh
y /path/to/script
según sea necesario.
El script se ejecutará mientras el sistema se está iniciando. Si se ejecuta demasiado pronto, puede escribir el script para tratar de 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 </dict>
línea:
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
Para obtener más información sobre los demonios y servicios de lanzamiento de OS X, sugiero buscar aquí una buena referencia rápida sobre cómo crearlos, o aquí para obtener una referencia más completa sobre lo que puede hacer launchd.
Hace algún tiempo usé cron para hacer precisamente eso. Puedes hacer una entrada como esta
@reboot /path/to/my/script
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 * * * *".
cron
no es la forma correcta de hacer esto en OS X en estos días. Utilice LaunchAgent o LaunchDeamon en su lugar (launchd). Para más información: developer.apple.com/library/mac/documentation/MacOSX/Conceptual/… Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.
cron
Sin embargo, es mucho más fácil de configurar que launchd
. Simplemente compare las dos respuestas en este hilo para ver a qué me refiero. cron
toma una sola línea en un solo archivo, donde launchd
necesita una secuencia de comandos para describir la secuencia de comandos que desea ejecutar en el arranque.Eche un vistazo a la secuencia de comandos de enlace de inicio de sesión.
https://wiki.afp548.com/index.php/Login/Logout_Hooks_in_OS_X
jeffk
donuts
donuts
jon brooks
<key>Program</key>
con el valor<string>/bin/sh</string>
y luego<key>ProgramArguments</key>
solo debe tener el valor<string>/path/to/script</string>
jon brooks
<key>ProgramArguments</key>
debe ser una matriz ...