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

42

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

    
pregunta prosseek 08.10.2010 - 15:43

5 respuestas

44

Método Gui

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

  • Vaya a la pantalla System Prefs > Accounts > Login Items y agregue el elemento allí
    • haciendo clic en el símbolo +
    • arrastrando y soltando el .app en el panel
  • En el dock, abre el menú contextual de una aplicación, selecciona Options , luego selecciona Open at Login

Método Launchd

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

  • en un momento determinado o en un intervalo específico
  • reiniciar continuamente si se bloquea
  • no relacionado con el inicio de sesión del usuario
  • como una función de 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 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

.

Codificación manual

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
  • La opción RunAtLoad lanzará la aplicación la primera vez que launchctl ejecute esto.
  • La opción KeepAlive reiniciará la aplicación si se bloquea.
  • El 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
  • Launchctl ejecutará esto después de reiniciar.

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.

    
respondido por el user588 08.10.2010 - 19:39
8

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.

    
respondido por el Robert S Ciaccio 08.10.2010 - 15:53
7

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"

    
respondido por el ghoppe 08.10.2010 - 18:02
5

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 .

    
respondido por el TJ Luoma 06.08.2011 - 04:53
4

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

  1. Cree un nuevo evento en iCal para la hora en que desee que se abra la aplicación.
  2. En 'Alerta', elija 'Abrir archivo', así que 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 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 ...

  1. Oculte todos los demás calendarios de iCloud o compartidos en la barra de la izquierda, pase el cursor sobre el nombre del calendario y haga clic en el botón "ocultar" que aparecerá.
  2. Ahora haga clic con el botón derecho (o con la tecla 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 sus preferencias de mouse para que sea un poco más útil que su "bloque cretino" predeterminado para estado de los cretinos) y seleccione 'Nuevo calendario'.
  3. Como todos los calendarios compartidos están ocultos, este nuevo calendario se creará como "En mi Mac" y será local para esta Mac.

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! ...

enlace

    
respondido por el Slowboy 17.09.2013 - 03:13

Lea otras preguntas en las etiquetas