¿Cuál es la forma más fácil de ejecutar un script en el momento del arranque en OS X?

12

Quiero que se ejecute un script (bash / zsh / ruby ​​/ ...) en el momento del arranque en OS X. ¿Cuál es la forma más sencilla de hacerlo, sin alterar los archivos xml / plist, y preferiblemente no es necesario crear un meta AppleScript? .

John Bachir
fuente

Respuestas:

7

MacOS X usa Vixie cron, que tiene metaetiquetas especiales para iniciar en el momento del reinicio. Vea la página del manual para el formato de archivo.

algo como:

@reboot /path/to/script.sh

en tu crontab funcionaría. No estoy seguro de que sea una mejor solución que launchd, probablemente tengas más herramientas meta que analizan launchd que cron.

Rich Homolka
fuente
Me encanta, me demostraste que estaba equivocado :-) Aunque cronen OS X no es tan bueno con el registro por defecto (hubo un tema al respecto hace solo unos días).
Daniel Beck
esto es perfecto.
John Bachir
1
Tenga en cuenta que cron, at, etc. están en cierta medida desaprobados en OS X. No puedo encontrar una declaración explícita de eso en los diversos documentos, ni sé cuán agresivamente están en desuso, pero generalmente parece que se prefiere el lanzamiento. Consulte la documentación de launchd para obtener una introducción.
Norman Gray
plist no funcionará para mí, esto funciona de maravilla, ¡gracias! :-D
BG Bruno
Sinceramente, no estaba seguro de si la sintaxis sería la misma en OS X.
NobleUplift
6

En caso de que cambie de opinión:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

Almacenar como com.superuser.245713.plisten /Library/LaunchAgents/y hacer root:wheelel propietario / grupo.

Daniel Beck
fuente
1
Podría decirse que es mejor ponerlo en /Library/LaunchAgentslugar de hacerlo /System/Library/LaunchDaemonsporque /Systemes material específico del sistema operativo y el que /Libraryse usa debajo se usa más para material de terceros. Además, LaunchDaemons"debe contener elementos que se ejecutarán como raíz, generalmente procesos en segundo plano", donde LaunchAgents"se ejecutará como un usuario o en el contexto de userland". La fuente de esas citas es un gran artículo sobre launchd que consulto para preguntas de launchd.
Doug Harris
@DougHarris ¡Gracias por las sugerencias! Tengo que admitir que estaba escribiendo este ad-hoc, aunque generalmente pruebo mis soluciones, no estaba dispuesto a reiniciar mi máquina para esto.
Daniel Beck
Esto es muy bueno, aunque me gusta más la solución cron de Vixie :)
John Bachir
En realidad, debe colocarse en / Library / LaunchDaemons. Los agentes solo se ejecutan dentro de una sesión de usuario, es decir, no se ejecutarán (o más precisamente, serán elegibles para ejecutarse) hasta que alguien inicie sesión, se ejecutará nuevamente cada vez que alguien inicie sesión y siempre se ejecutará como el usuario actualmente conectado. Los demonios se ejecutan (/ se vuelven elegibles para ejecutarse) en el arranque, y aunque normalmente se ejecutan como root, se pueden ejecutar como algún otro usuario con la clave UserName.
Gordon Davisson el
2
@ the0ther La web no olvida.
Daniel Beck
2

También hay ganchos de inicio de sesión si prefiere que el script se ejecute (como root) cuando un usuario inicia sesión en lugar de cuando se inicia el equipo.

Deditos
fuente