0 votos

¿Condicionando el trabajo programado de launchd a la existencia de un archivo?

Tenemos un trabajo programado que queremos ejecutar en nuestros hosts MacOS y Linux.

En Linux, con systemd podemos simplemente usar esto:

ConditionPathExists=/etc/this_file_must_exist
ConditionPathExists=!/etc/skip_if_this_exists

y el trabajo sólo se ejecutará si el primer archivo existe, y el segundo archivo está ausente (para que podamos detener la ejecución del trabajo programado, por ejemplo, si estamos probando una nueva versión).

¿Existe un equivalente en MacOS? He visto a otros lograr un resultado similar usando Bash y simplemente ejecutando `[[ -f /etc/este_archivo_debe_existir ]] && run_my_job`` pero esto parece... no ser la forma ideal.

launchd.plist ( https://www.manpagez.com/man/5/launchd.plist/ -- el enlace oficial parece estar caído) tiene KeepAlive pero eso es para mantener el servicio, no para evitar que se inicie.

Gracias.

2voto

Nate Puntos 220

Respuesta corta: No.

launchd puede iniciar trabajos a horas programadas (con el StartCalendarInterval ), cuando se modifican determinados archivos ( WatchPaths ), o cuando los archivos aparecen en un directorio determinado ( QueueDirectories ), pero no tiene una manera de probar la existencia de un archivo específico, ni de combinar condiciones de la manera que usted desea.

Así que... algo como un bash wrapper es lo que estás viendo. Puedes escribir un bash script y ejecutarlo con un StartCalendarInterval o utilizar el ProgramArguments para incrustar un script en miniatura directamente en el plist:

<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>[[ -e /etc/this_file_must_exist ]] && [[ ! -e /etc/skip_if_this_exists ]] && exec /path/to/my_job</string>
</array>

Nota: Recomiendo ejecutar el trabajo desde bash con exec que hace que el trabajo sustituya al shell (en lugar de ejecutarse como un subproceso), para que launchd pueda supervisarlo y gestionarlo más directamente.

0 votos

Es bueno saberlo.

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