3 votos

¿Puedo cambiar los argumentos del programa launchd en función del intervalo del calendario?

Estoy intentando ejecutar un script ( zfssnap.sh ) para automatizar las instantáneas, pero uno de los argumentos debe cambiar en función de la entrada de tiempo que desencadena el inicio del script. Con cron, simplemente añadiría una nueva línea con el argumento cambiado y establecería los campos de tiempo en consecuencia.

Al leer el launchd y launchd.conf páginas de manual, no veo ninguna manera de asociar un argumento con un StartCalendarInterval entrada clave. Esto parece una limitación importante, así que quizás me estoy perdiendo algo.

¿Hay alguna manera de cambiar un argumento basado en el tiempo en que se ejecuta el script? O, ¿tengo que hacer un nuevo plist para cada una de las situaciones que estoy tratando de satisfacer?

2 votos

Hágalo en un bash script que realmente cambie los argumentos del programa. Vea este ejemplo: apple.stackexchange.com/questions/334534/

1 votos

Eso podría funcionar. Puedo repartir los tiempos un poco para hacer una prueba más decisiva.

1voto

Nate Puntos 220

Lo "normal" es hacer un nuevo .plist para cada combinación de tiempo/argumento diferente. Esto es esencialmente el equivalente a hacer múltiples entradas en el crontab, excepto que cada "entrada" es un archivo completo, no sólo una línea.

Hay un buen ejemplo de esto en las entradas del demonio de lanzamiento de MacOS para el programa de mantenimiento periódico. /System/Library/LaunchDaemons/com.apple.periodic-daily.plist ejecuta /usr/libexec/periodic-wrapper con el argumento "diario" y un intervalo de 24 horas, ...periodic-weekly.plist lo ejecuta con el argumento "semanal" y un intervalo de 7 días, y ...periodic-monthly.plist lo ejecuta con el argumento "mensual" y un intervalo de 30,44 días.

0 votos

Decidí ir por este camino, pero que PITA. Me gustaría que Apple hiciera esto más flexible ya que han desaprobado cron. En cualquier caso, sigo teniendo problemas para que uno de ellos funcione. El argumento es <string>pool/dataset</string> y estoy pensando launchd está tratando como una ruta en lugar de un simple argumento que se pasa al script. Puede que todavía tenga que ejecutar un script separado para eso.

0 votos

@tim.rohrer Debería tratarse como una cadena simple, sin ninguna interpretación (ni siquiera se expande ~ o comodines, a menos que se establezca el EnableGlobbing clave). ¿Puedes decir qué recibe el script como argumento?

0 votos

zxfer de https://github.com/allanjude/zxfer . El código de estado de launchd es 3, que aún no he podido encontrar definido. Puedo tomar la misma línea de comandos y argumentos del plist y parece que se ejecuta con éxito. Aquí hay un pastebin del plist: pastebin.com/VAeGeN4E

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