¿Cómo puedo ejecutar / detener / reiniciar una aplicación automáticamente, en el arranque / inicio de sesión / en otro momento?

42

¿Cómo hace que un script o aplicación se ejecute o deje 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.?

prosseek
fuente
3
Lingon es solo una aplicación para hacer que la creación de los archivos .plist para el lanzamiento sea más fácil de usar. También alguien creó un creador de lanzamiento
lanzado en la
¡Abucheo! plist.spotmac.de parece haberse ido. :-(
docwhat

Respuestas:

44

Método Gui

Si desea que se ejecute algo cuando un usuario inicia sesión, la forma más fácil es usar la GUI. Usted puede

  • Vaya a la System Prefs > Accounts > Login Itemspantalla y agregue el elemento allí al
    • haciendo clic en el +símbolo
    • arrastrando y soltando .appen el panel
  • En el dock, abra el menú contextual de una aplicación, seleccione Optionsy luego seleccioneOpen at Login

Método lanzado

Si desea lanzar algo que no es un .app, o desea tener más control sobre el lanzamiento, como:

  • en un momento determinado o en un intervalo especificado
  • relanzar continuamente si se bloquea
  • no relacionado con el inicio de sesión del usuario
  • en función del acceso a la red
  • solo se ejecuta cuando se está ejecutando otro proceso
  • cuando se agrega un archivo a una carpeta
  • etc.

entonces quieres usar la solución técnica que es launchd.

La forma más fácil de configurar un launchdarchivo de configuración es usar una herramienta para ayudar. Al momento de escribir, el método más popular es Lingon (que tiene una versión gratuita más antigua disponible de SourceForge), o la herramienta PList Website .

Codificación manual

Si no desea usar Lingon o el sitio web PList y solo quiere usar las herramientas en bruto disponibles en el sistema, puede escribir las suyas launchd plista mano

Aquí está mi script launchd para ejecutar SomeApp continuamente después de que el sistema se inicie (independientemente de que un usuario inicie sesión). Está en / System / Library / LaunchAgents / y se llama SomeApp.restart.plist. Si se ejecuta en base a un inicio de sesión de 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
  • La RunAtLoadopción iniciará la aplicación la primera vez que launchctl ejecute esto.
  • La KeepAliveopción volverá a iniciar la aplicación si se bloquea.
  • Lo StartCalendarIntervalejecutará en un momento determinado. Presumiblemente, esto es mutuamente exclusivo con los dos anteriores, pero se incluye para mostrar lo que se puede hacer conlaunchd
  • Launchctl ejecutará esto después de reiniciar.

Hay muchas opciones adicionales que se pueden encontrar mediante la experimentación con Lingon o mediante la lectura de las páginas del manual para launchctl, launchd.plist, plist, launchd.conf, etc.


fuente
Gracias, realmente útil. También puede usar launchctl load -w ...para hacer que el cambio sea persistente. Sobre la base de sus comentarios He actualizado mi OSX guión poweruser configurador
Sorin
8

Lingon todavía funciona. La utilicé 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.

Robert S Ciaccio
fuente
1
Lingon también está ahora en la App Store
user151019
1
Pero para encontrar la versión gratuita y de código abierto, debe extraerla de Sourceforge. La última versión comercial tampoco funciona en Leopard (10.5). Pero 2.1.1 sí - ver sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb
7

Si solo es necesario ejecutar cuando se inicia el sistema, simplemente use la pestaña Elementos de inicio de sesión del panel de preferencias Cuentas en Preferencias del sistema.

texto alternativo

Si es un script, use el Editor AppleScript para guardarlo como una aplicación. Si no es un script AppleScript, aún puede usar AppleScript para ejecutar el script de esta manera:

do shell script "your script here"

ghoppe
fuente
¿Eh? Estás seguro de eso ? Dice en la interfaz de usuario de su captura de pantalla "Estos elementos se abrirán automáticamente cuando inicie sesión". ¿No es diferente de cuando se inicia el sistema? Además, su enlace parece 404.
ssc
5

No olvides Loginhooks.

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 solo agregue los comandos que desee al ~ / .loginhook

Además, aunque 'launchd' es "la manera 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 .

TJ Luoma
fuente
Entonces, el script en el bloque de código debe guardarse como /path/to/scripty 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?
Lri
@Lri: sí, precisamente. Lo siento, eso no fue más claro. El código de bloque podría ser /usr/local/bin/loginhook.sh y, dado que se ejecuta desde la raíz, buscará un $ HOME / .loginhook cuando un usuario inicie sesión y lo ejecutará como ese usuario.
TJ Luoma
4

¡Ejecutar una aplicación a una hora específica se puede hacer fácilmente en iCal, como acabo de descubrir gracias a otro foro!

  1. Crea un nuevo evento en iCal durante el tiempo que quieras que se abra la aplicación.
  2. En 'Alerta', elija 'Abrir archivo'; por lo tanto, puede configurar un archivo para que se abra, lo que obviamente también abrirá la aplicación predeterminada para ese tipo de archivo.
  3. Para abrir una aplicación, en lugar de un archivo, cambie el menú desplegable 'iCal' a 'Otro ...' y elija la aplicación que desea ejecutar.

Una cosa a tener en cuenta es que si tiene varias Macs que comparten cosas a través de iCloud, este evento también se ejecutará en esas aplicaciones, que puede querer o no. 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 ...

  1. Oculte todos los demás calendarios compartidos o iCloud en la barra de la izquierda pasando el cursor sobre el nombre del calendario y haciendo clic en el botón "Ocultar" que aparecerá.
  2. Ahora haga clic derecho (o haga clic en Opción si es un cretino completo y aún no se ha dado cuenta de que tiene más de un dedo y puede cambiar las preferencias de su mouse para que sea un poco más útil que su estado predeterminado 'ladrillo cretino para cretinos' ) y elija 'Nuevo calendario'.
  3. Debido a que todos los calendarios compartidos están ocultos, este nuevo calendario se creará como 'En mi Mac' y será local para esta Mac.

Acabo de descubrir esto por mí mismo, y ambos consejos me sorprendieron gratamente, así que pensé en compartirlos aquí.

Recibí la información de estas personas útiles aquí ... ¡así que gracias a ustedes! ...

http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/

Slowboy
fuente