¿Cómo hace que un script o una aplicación se ejecuten o dejen de ejecutarse automáticamente cuando se inicia el sistema, un usuario inicia sesión, en un momento específico, cuando se conecta un disco, etc.?
Si desea que algo se ejecute cuando un usuario inicia sesión, la forma más fácil es usar la GUI. Usted puede
System Prefs > Accounts > Login Items
pantalla y agregue el elemento allí
+
símbolo.app
en el panelOptions
y, a continuación, seleccioneOpen at Login
Si desea lanzar algo que no es un .app
, o si desea tener más control sobre su lanzamiento, como por ejemplo:
entonces desea utilizar la solución técnica que es launchd
.
La forma más fácil de configurar un launchd
archivo de configuración es usar una herramienta para ayudar. En el momento de escribir este artículo, el método más popular es Lingon (que tiene una versión gratuita anterior disponible en SourceForge) o la herramienta del sitio web PList .
Si no desea utilizar Lingon o el sitio web de PList y solo desea utilizar las herramientas sin procesar disponibles en el sistema, puede escribir las suyas launchd
plist
a mano .
Aquí está mi secuencia de comandos launchd para ejecutar SomeApp continuamente después de que se inicie el sistema (independientemente de que un usuario inicie sesión). 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>
Cargarlo una vez con
launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
RunAtLoad
opción iniciará la aplicación la primera vez que launchctl ejecute esto.KeepAlive
opción reiniciará la aplicación si falla.StartCalendarInterval
ejecutará en un momento determinado. Presumiblemente, esto es mutuamente excluyente con los dos anteriores, pero se incluye para mostrar lo que se puede hacer conlaunchd
Hay muchas opciones adicionales que se pueden encontrar experimentando con Lingon o leyendo las páginas de manual para launchctl
, launchd.plist
, plist
, launchd.conf
, etc.
launchctl load -w ...
para hacer que el cambio sea persistente. Según sus comentarios, actualicé mi script de configuración de OSX poweruserlaunchctl load
está en desuso después de Big Sur. Puedes correr launchctl enable gui/$UID/SomeApp.restart
en su lugar.Lingon todavía funciona. Lo usé la semana pasada para crear una "tarea programada". Después de descargarlo, tuve que usar su actualizador automático para obtener la última versión, pero funciona bien.
Si solo es necesario ejecutarlo cuando se inicia el sistema, use la pestaña Elementos de inicio de sesión del panel de preferencias Cuentas en Preferencias del sistema.
Si es un script, use AppleScript Editor para guardarlo como una aplicación. Si no es un script de AppleScript, aún puede usar AppleScript para ejecutar el script de esta manera:
do shell script "your script here"
No olvide los ganchos de inicio de sesión.
Aunque se ejecutan como root, debería 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, simplemente agregue los comandos que desee al ~/.loghook
Además, aunque 'launchd' es "la forma de Mac", crontab sigue siendo una opción perfectamente viable, y es mucho más fácil de editar a mano que los archivos XML launchd.
Personalmente, felizmente pagué $5 por Lingon .
/path/to/script
, y sudo defaults write com.apple.loginwindow LoginHook /path/to/script
? ¿Y el punto de ejecutar un script en el directorio de inicio es que cada usuario puede tener un personalizado (o no) ~/.loginhook
?Ejecutar una aplicación en un momento específico se puede hacer fácilmente en iCal, ¡como acabo de descubrir gracias a otro foro!
Una cosa a tener en cuenta es que si tiene varias Mac compartiendo cosas a través de iCloud, este evento también se ejecutará en esas aplicaciones, que puede o no desear. Para que esto solo suceda en una sola Mac, debe crear el evento en un calendario 'En mi Mac', lo que puede hacer de la siguiente manera...
Acabo de descubrir esto por mí mismo y me sorprendieron gratamente ambos consejos, así que pensé en compartirlos aquí.
Obtuve la información de estas personas útiles aquí... ¡así que gracias gente!...
http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/
Chealión
docwhat