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

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.


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.


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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.