Como mencionaste "He creado un script de automatización de calendario que se ejecuta cada dos noches y reinicia la aplicación, pero eso hace que la aplicación se muestre al frente", asumo que tienes las partes del flujo de trabajo en su lugar que cierra tu aplicación en base a un tiempo programado.
Suena como que la parte que necesitas resolver es cómo abrir la aplicación después de que se cierre, para que no aparezca en primer plano.
Usando una acción de Ejecutar AppleScript (eliminando cualquier código de ejemplo que pueda estar presente):
ignorando respuestas de la aplicación
decir a la aplicación llamada "..."
si no está en ejecución entonces ejecutar
fin decir
fin ignorando
Debes asegurarte de que la parte de tu flujo de trabajo que cierra la aplicación haya completado antes de intentar un relanzamiento. Si el script anterior se ejecuta mientras la aplicación está en proceso de apagarse, no hará nada.
Para completitud, aquí tienes un ejemplo de script que manejaría el cierre y relanzamiento de una aplicación en segundo plano. Se ejecutaría usando una acción de Ejecutar script de Shell, y asume que tienes zsh
instalado:
#!/usr/bin/env zsh
bgreopen () {
pkill -xi "$*" &&
osascript <<-OSA
ignorando respuestas de la aplicación
decir aplicación "$*" a ¬
si no está en ejecución ¬
entonces ejecutarlo
fin ignorando
OSA
} &>/dev/null
bgreopen Microsoft Teams
Reemplaza "Microsoft Teams"
con el nombre de tu aplicación. Utiliza osascript
para ejecutar el AppleScript de la parte anterior de esta respuesta, en parte para demostrar su incorporación en una solución más grande, y en parte porque es muy confiable para lanzar aplicaciones en silencio.
El comando shell open
tiene una marca de opción -j
utilizada para lanzar una aplicación oculta. Ha sido ligeramente menos confiable en el pasado para mantenerse oculto, pero esto fue en una versión anterior del sistema operativo. Si quieres intentar esto en su lugar, en realidad sería un método más ideal ya que mantiene todo ejecutándose en el mismo lenguaje en lugar de llamar y salir a otros lugares. También es una solución mucho más elegante:
#!/usr/bin/env zsh
(){ pkill -ix "$*" &&
open -ja "$*"
} &>/dev/null Microsoft Teams
Además, open
tiene una marca de opción -g
, que específicamente evita que las aplicaciones se muestren al frente al iniciar. Usado independientemente de -j
, abriría la aplicación detrás de lo que estás trabajando, pero no necesariamente estaría oculta. La bandera -j
debería implicar -g
también, pero tal vez no lo hace y explica mi experiencia variada con ella en el pasado. Por lo tanto, puedes experimentar para ver qué funciona para ti, y puedes combinar su uso junto con: open -jga "$*"
(asegúrate de que a
sea la última de las banderas de opción inmediatamente antes del argumento "$*"
que representa el nombre de la aplicación).
Si deseas optimizar la eficiencia de este proceso, puedes buscar launchd
. Es el demonio de inicio de macOS que regula la ejecución de programas en un horario, y te permitiría eliminar Automator y las alarmas de calendario de la ecuación. Solo requeriría un archivo .plist
que defina con qué frecuencia quieres ejecutar un script, y el cuerpo del script o la ruta a un archivo de script, que simplemente sería el script de shell anterior.
3 votos
¿Qué aplicación es? Tal vez sería mejor ver si podemos sugerir una solución. El problema suena muy extraño.