1 votos

¿Cómo se utiliza launchd para ejecutar un proceso durante más tiempo que el intervalo?

He escrito un agente de arranque:

        Label
        local.mylaunchagent.plist
        ProgramArguments

            ~/my_script.sh

        StartInterval
        12
        StandardOutPath
        ~/my_log_file
        StandardErrorPath
        ~/my_err_file
        RunAtLoad

Funciona, pero se ejecuta cada 22 segundos en lugar de cada 12 segundos, porque ~/my_script.sh tarda 10 segundos en terminar.

launchd parece estar sumando el tiempo de intervalo y el tiempo de ejecución juntos, aunque yo quiero que el programa se ejecute cada intervalo. No quiero que launchd espere a que termine.

Así que intenté ejecutar el programa en segundo plano:

ProgramArguments

    /bin/zsh
    -c
    ~/my_script.sh & disown

Pero ahora no obtengo ninguna salida en absoluto, así que sospecho que launchd mata todos los procesos generados tan pronto como el proceso que lanzó sale.

Entonces mi pregunta es, ¿cómo puedo iniciar un comando lento (que tarda más de 10 segundos en terminar de forma impredecible) cada 12 segundos de forma fiable?

1voto

Linc D. Puntos 11

Es un error que un Launch Daemon se bifurque en segundo plano. La forma correcta de hacer lo que quieres es iniciar un proceso en primer plano de larga duración que periódicamente genere un proceso en segundo plano, opcionalmente después de comprobar que todos los subprocesos anteriores hayan finalizado.

Para asegurarse de que el trabajo se esté ejecutando siempre, necesitas establecer un valor adecuado para la clave KeepAlive, como True.

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