2 votos

Abrir una aplicación periódicamente en Mac OSX

Quiero abrir una aplicación GUI (probablemente basada en Electron) periódicamente en un Mac Book. El período se configurará (diariamente, cada hora, etc.) dentro de la aplicación. ¿Cómo puedo conseguirlo?

3voto

Steve Evans Puntos 155

Hay numerosos enfoques que puede adoptar.

launchd o lanzador de terceros

Puedes utilizar herramientas como la integrada en MacOS launchd o herramientas de terceros como Gestor de energía (que escribí yo, así que no dudes en preguntarme sobre su uso):

enter image description here

Power Manager incluye una tarea que cubre Cómo programar el inicio de una aplicación en Mac OS X .

Prefiero launchd en cron

Probablemente quiera evitar cron porque no opera en la sesión gráfica del usuario actual. cron es bueno para herramientas de línea de comandos y scripts, pero menos adecuado para aplicaciones gráficas de Mac.

AppleScript y Calendario

Una simple aplicación de AppleScript combinada con el archivo de apertura de un evento del calendario como alarma puede ser suficiente. El fragmento de AppleScript que se muestra a continuación abrirá una aplicación especificada y la traerá al frente:

tell application "My Electron Application" to activate

Estas preguntas relacionadas entran en detalles:

0 votos

Los comandos lanzados desde cron pueden obtener acceso a la sesión gráfica del usuario actual mediante la función reattach-to-user-namespace disponible, por ejemplo, en Elaboración casera .

1 votos

A mí me sigue funcionando en MacOS 12.4.

2voto

Sim86 Puntos 25

¿Qué tal un bash de la vieja escuela script, llamado por .bash_profile y .bashrc ?

es decir, en su .bash_profile / .bashrc puedes tener:

# ...
bash /home/<user>/run.sh &

Y en su run.sh puedes dormir en un bucle y activar la aplicación.

1voto

qarma Puntos 71

Launchd Archivo .plist

Puede crear un plist que describirá el trabajo a realizar por launchd a intervalos que puedes definir en el plist. Hay cierta terminología que es más fácil de aprender simplemente leyendo otro archivo plist, como el que he escrito a continuación.

Una vez hecho esto, puedes mover el archivo plist a ~/Library/LaunchAgents que ejecutará el trabajo con su nombre de usuario.

Por último, consiga el launchd daemon a load su archivo de configuración, que iniciará el trabajo:

launchctl load chri.sk.launchd.plist

A partir de ese momento, el trabajo especificado en el archivo plist se llevará a cabo en los intervalos definidos, y seguirá realizándose para siempre, o hasta que unload lo:

launchctl unload chri.sk.launchd.plist

Se iniciará automáticamente cada vez que se reinicie el sistema, y se reanudará si alguna vez se desactiva.

    <?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>Label</key>
        <string>chri.sk.launchd</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/open</string>
            <string>-a</string>
            <string>TextEdit</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Nice</key>
        <integer>1</integer>
        <key>StartInterval</key>
        <integer>60</integer>
        <key>StandardErrorPath</key>
        <string>/Users/CK/Documents/launchd.err.txt</string>
        <key>StandardOutPath</key>
        <string>/dev/null</string>
    </dict>
    </plist>

Esto abre TextEdit cada 60 segundos. Aquí es una guía bastante útil para definir los intervalos.

Cualquier error se escribe en la ruta del archivo especificado por StandardErrorPath .

Haga que el nombre del archivo y el label el mismo valor. La convención de nomenclatura de Apple recomienda utilizar un identificador de nombre de host inverso, pero en ausencia de un nombre de dominio que le pertenezca, podría utilizar simplemente algo como surname.firstname.jobtitle .

El launchd.plist define todas las claves de la lista de propiedades y explica lo que hace cada una de ellas. Ir a Terminal y escriba man launchd.plist .

AppleScript

    property hour : 3600
    property day : 86400
    property RunEvery : day
    property AppName : "An Application"

    on run
        idle
    end run

    on idle
        tell application named AppName to activate
        return RunEvery
    end idle

    on quit
        continue quit
    end quit

Si guarda este AppleScript como stay-open aplicación, y luego ejecutarla, se mantendrá abierta y ejecutará el idle comandos todos los días. Actualmente, para impedir que este scriptcontinúe, tendría que terminarlo desde el muelle o Monitor de actividad .

0 votos

En StartInterval en el archivo plist se ignorará, ya que la configuración de KeepAlive a true hace que launchd ejecute continuamente el programa. (Cada vez que el programa sale lo lanza de nuevo).

0 votos

@nmgeek Aunque esto fue allá por 2018, recuerdo haber probado el .plist para asegurarme de que hacía lo que yo esperaba. ¿Insinúa que el StartInterval puede extraerse completamente y, siempre que el KeepAlive está activada, no habría ninguna diferencia observable en la forma en que el .plist ¿Realiza? Si es así, ¿qué dicta la ejecución periódica del código shell que contiene, que en la actualidad se ejecutaría cada 60 segundos? KeepAlive no, que yo sepa, no controla el tiempo. ¿O lo he entendido mal?

0 votos

No he probado esto con KeepAlive establecido en true. Así que no estoy seguro de que esté esperando 60 segundos antes de relanzar el programa. KeepAlive le está diciendo a launchd que inmediatamente vuelva a ejecutar el programa después de que el programa salga. Por lo tanto, la temporización depende del tiempo que tarde en ejecutarse el programa. Si el programa se ejecuta demasiado rápido, launchd aplicará un retardo, esperando antes de relanzarlo. El retardo es de 10 segundos. Por lo tanto, si su programa se ejecuta cada 60 segundos, habrá tardado 60 segundos en salir.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X