¿Cómo puede hacer que una secuencia de comandos o una aplicación se ejecute o deje de ejecutarse automáticamente cuando el sistema se inicia, el usuario inicia sesión, en un momento específico, cuando se adjunta un disco, etc.?
¿Cómo puede hacer que una secuencia de comandos o una aplicación se ejecute o deje de ejecutarse automáticamente cuando el sistema se inicia, el usuario inicia sesión, en un momento específico, cuando se adjunta un disco, etc.?
Si desea que se ejecute algo cuando un usuario inicia sesión, la forma más sencilla es utilizar la GUI. Usted puede
System Prefs > Accounts > Login Items
y agregue el elemento allí
+
.app
en el panel Options
, luego selecciona Open at Login
Si desea lanzar algo que no es un .app
, o quiere tener más control sobre el lanzamiento, como:
entonces quieres usar la solución técnica que es launchd
.
La forma más fácil de configurar un archivo de configuración launchd
es usar una herramienta para ayudar. Al momento de escribir, el método más popular es Lingon (que tiene una versión anterior más antigua disponible en SourceForge), o el Herramienta de sitio web
Si no quiere usar Lingon o el sitio web de PList y solo quiere usar las herramientas en bruto disponibles en el sistema, puede escribir su propio launchd
plist
a mano
Aquí está mi script launchd para ejecutar SomeApp continuamente después de que se inicie el sistema (independientemente del inicio de sesión del usuario). Está en / System / Library / LaunchAgents / y se llama SomeApp.restart.plist. Si se ejecuta en función del inicio de sesión de un usuario, podría almacenarse en ~ / Library / LaunchAgents /
<?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>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>SomeApp.restart</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>5</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
</dict>
</plist>
Cárgalo una vez con
launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
RunAtLoad
lanzará la aplicación la primera vez que launchctl ejecute esto. KeepAlive
reiniciará la aplicación si se bloquea. StartCalendarInterval
lo ejecutará en un momento determinado. Presumiblemente, esto se excluye mutuamente con los dos anteriores, pero se incluye para mostrar lo que se puede hacer con launchd
Hay muchas opciones adicionales que se pueden encontrar experimentando con Lingon o leyendo las páginas del manual de launchctl
, launchd.plist
, plist
, launchd.conf
, etc.
Lingon todavía funciona. La usé la semana pasada para crear una "tarea programada". Después de descargarlo, tuve que usar su auto-actualizador para obtener la última versión, pero funciona bien.
Si solo es necesario ejecutarlo cuando se inicia el sistema, simplemente use la pestaña Elementos de inicio de sesión del panel de preferencias de su Cuenta en las preferencias del sistema.
Sisetratadeunscript,useelEditordeAppleScriptparaguardarlocomounaaplicación.SinoesunasecuenciadecomandosdeAppleScript,aúnpuedeutilizarAppleScriptparaejecutarlasecuenciadecomandosdeestamanera:
doshellscript"your script here"
No te olvides de Loginhooks.
Aunque se ejecutan como root, deberías poder ejecutar un script $ HOME / .loginhook usando algo como esto:
#!/bin/sh
home='eval echo ~$user'
if [ -x "$home/.loginhook" ]; then
logger -t $0 "executing .loginhook of user $user"
su - $user -c "$home/.loginhook"
fi
Luego, solo agrega los comandos que quieras al ~ / .loginhook
Además, aunque 'launchd' es "a la manera de Mac", crontab sigue siendo una opción perfectamente viable, y es mucho más fácil de editar manualmente que los archivos launchd de XML.
Personalmente, felizmente pagué $ 5 por Lingon .
Ejecutar una aplicación a una hora determinada se puede hacer fácilmente en iCal, ¡como acabo de descubrir gracias a otro foro!
Una cosa que debes tener en cuenta es que si tienes múltiples Macs compartiendo cosas en iCloud, este evento también se ejecutará en esas aplicaciones, que puedes o no desear. Para que esto solo suceda en una sola Mac, debe crear el evento en un calendario 'En mi Mac' que puede hacer de la siguiente manera ...
Acabo de descubrirlo por mi cuenta y me sorprendió gratamente ambos consejos, así que pensé en compartirlos aquí.
Obtuve la información de estas personas útiles aquí ... ¡así que gracias, gente! ...
Lea otras preguntas en las etiquetas macos boot login-items startup