0 votos

El relanzamiento automático de la aplicación a través de `launchd` provoca el parpadeo del segundo icono de la aplicación de la barra de menús.

Estoy usando un launchd script que se encuentra aquí para relanzar automáticamente una aplicación si ésta se bloquea:

Relanzar automáticamente una aplicación de macOS cerrada

La aplicación tiene un icono en la barra de menús. Después de ejecutar ese script para activar el relanzamiento si se bloquea, me doy cuenta de que aparece una segunda instancia del icono de la barra de menús y parpadea de forma molesta en la barra de menús brevemente cada 20-30 segundos más o menos.

Es como si el script en realidad lanzara una nueva instancia de la aplicación, que luego termina rápidamente si ya se está ejecutando una instancia existente de la aplicación. Cuando en realidad sólo quiero que vuelva a lanzar si cerrado.

¿Por qué se produce este segundo lanzamiento de la aplicación?

¿Hay alguna launchd / launchctl argumentos que sólo relanzarán el programa si ya no se está ejecutando?

1voto

WindChimes Puntos 111

Tuve un problema similar, pero en mi archivo .plist en realidad estaba haciendo referencia a un bash script. Dentro de ese bash script, me gustaría iniciar un programa en particular, a continuación, ejecutar algunos comandos adicionales. El problema era que al cargar el archivo .plist con launchctl, se ejecutaría el bash script correctamente, el programa se iniciaría, sin embargo una vez que el bash script terminara, el proceso generado del programa también terminaría. Añadiendo el KeepAlive en el archivo .plist no mantenía abierto el programa generado, sino que ejecutaba repetidamente el bash script (dando lugar a una situación similar al "flasheo" que describes).

Para mí, la solución fue añadir la siguiente configuración en el archivo .plist:

<key>AbandonProcessGroup</key>
<true/>

De esta manera, el proceso generado por el script de bash sería "abandonado" por launchd y, por lo tanto, se le permitiría continuar ejecutándose, incluso después de que el script de bash saliera.

Si esto no resuelve tu problema, entonces tendrás que depurar y ver qué está pasando. Para depurar, añade la siguiente configuración:

   <key>StandardErrorPath</key>
   <string>/tmp/mycommand.err</string>
   <key>StandardOutPath</key>
   <string>/tmp/mycommand.out</string>

A continuación, observe los dos archivos de registro con tail -f .

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