3 votes

Puis-je modifier les arguments du programme launchd en fonction de l'intervalle du calendrier ?

J'essaie d'exécuter un script ( zfssnap.sh ) pour automatiser les instantanés, mais l'un des arguments doit changer en fonction de l'entrée de temps qui déclenche le démarrage du script. Avec cron, il me suffirait d'ajouter une nouvelle ligne avec l'argument modifié et de définir les champs de temps en conséquence.

En lisant le launchd y launchd.conf pages de manuel, je ne vois aucun moyen d'associer un argument à un élément spécifique. StartCalendarInterval entrée clé. Cela semble être une limitation importante, alors peut-être que je manque quelque chose ?

Existe-t-il un moyen de changer un argument en fonction du moment où le script est exécuté ? Ou, dois-je créer un nouveau plist pour chacune des situations que j'essaie de satisfaire ?

2 votes

Faites-le dans un bash script qui change réellement les arguments du programme. Voir cet exemple : apple.stackexchange.com/questions/334534/

1 votes

Ça pourrait marcher. Je peux étaler un peu les temps pour faire un test plus décisif.

1voto

Gordon Davisson Points 30215

La chose "standard" à faire est de créer un nouveau .plist pour chaque combinaison temps/argument. C'est essentiellement l'équivalent de faire plusieurs entrées dans la crontab, sauf que chaque "entrée" est un fichier entier, pas seulement une ligne.

Il y a un bon exemple de ceci dans les entrées du démon de lancement de MacOS pour le programme de maintenance périodique. /System/Library/LaunchDaemons/com.apple.periodic-daily.plist lance /usr/libexec/periodic-wrapper avec l'argument "daily" et un intervalle de 24 heures, ...periodic-weekly.plist le lance avec l'argument "weekly" et un intervalle de 7 jours, et ...periodic-monthly.plist le lance avec l'argument "monthly" et un intervalle de 30,44 jours.

0 votes

J'ai décidé de suivre cette voie, mais quelle galère ! J'aimerais qu'Apple rende cette méthode plus flexible depuis qu'ils ont déprécié cron. En tout cas, j'ai toujours du mal à faire fonctionner l'un d'entre eux. L'argument est <string>pool/dataset</string> et je pense launchd est traité comme un chemin au lieu d'un simple argument passé au script. Il se peut que je doive encore exécuter un script séparé pour celui-là.

0 votes

@tim.rohrer Il devrait être traité comme une chaîne de caractères ordinaire, sans aucune interprétation (il n'y a même pas d'extension). ~ ou des caractères génériques, sauf si vous définissez l'option EnableGlobbing clé). Pouvez-vous dire ce que le script reçoit comme argument ?

0 votes

zxfer de https://github.com/allanjude/zxfer . Le code d'état de launchd est 3, que je n'ai pas encore réussi à définir. Je peux prendre la même ligne de commande et les mêmes arguments de la plist et il semble s'exécuter avec succès. Voici un pastebin de la plist : pastebin.com/VAeGeN4E

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X