6 votes

Lancer la commande launchd toutes les minutes d'une heure spécifique

Sur man launchd.plist il est dit (soulignement de moi)

StartCalendarInterval Cette clé facultative provoque le démarrage de la tâche à chaque intervalle de calendrier spécifié. Les arguments manquants sont considérés comme des jokers. La sémantique est similaire à crontab(5) pour spécifier les dates de déclenchement. Plusieurs dictionnaires peuvent être spécifiés dans un tableau pour planifier plusieurs intervalles de calendrier.

Mon fichier plist est /Users/enricozb/test.plist et contient

    Label
    com.enricozb.test
    ProgramArguments

        date

    StandardOutPath
    /Users/enricozb/test.txt
    StartCalendarInterval

        Hour
        21

Remarquez que Hour est défini sur 21, soit 21h. De plus, remarquez que la commande est simplement date > /Users/enricozb/test.txt. J'ai exécuté

launchctl load /Users/enricozb/test.plist
launchctl start com.enricozb.test

Cela se déclenche une seule fois juste après la commande launchctl start, et jamais après.

Je pensais que puisque la documentation indique que les arguments manquants sont des jokers, le champ Minute serait également un joker. Pourquoi cela ne s'exécute-t-il pas toutes les minutes?

4voto

Seamus Points 3171

Édition de démarrage

Vous avez tout correct sauf pour encadrer votre élément à l'intérieur d'un élément . Votre script s'exécutera toutes les minutes de 21:00 à 21:59 avec ce qui suit comme clé StartCalendarInterval :

    StartCalendarInterval

            Hour
            21

Si vous vouliez que votre script s'exécute toutes les minutes, toutes les heures, tous les jours, toutes les années, la syntaxe correcte (mais certainement pas évidente) serait la suivante :

    StartCalendarInterval

Ma réponse originale (ci-dessous) fonctionnerait également, mais c'est clairement beaucoup plus fastidieux! D'autre part, si une minute sur deux était nécessaire, ou certaines minutes, cela pourrait être utile.

Fin de l'édition


StartCalendarInterval

            Minute
            0

            Minute
            1

            Minute
            2

            Minute
            3

            Minute
            4

       ... ad nauseum ...

            Minute
            59

Pour répondre à votre question, "Pourquoi cela ne s'exécute-t-il pas toutes les minutes?", c'est simplement car vous avez omis d'encadrer à l'intérieur de . En passant, cela me semble également très étrange, et Pourquoi cela est conçu de cette façon est une réponse que j'aimerais entendre moi-même. Mais je suppose qu'Apple pourrait utiliser la défense que "juste parce que les sémantiques sont similaires ne signifie pas que la syntaxe l'est".

2voto

moodforaday Points 2633

Je pense que c'est un bug dans launchd.

Si je retire la désignation de l'heure, il se déclenche toutes les minutes.

Mais si je restreins le plist à seulement 21h, alors il ne se déclenche qu'une seule fois.

Mise à jour

Voici ce que j'ai essayé (avec l'heure changée en '12' car c'est l'heure actuelle lorsque j'ai essayé de le tester).

Le fichier 'test.txt' ne se crée jamais.

    Label
    com.tjluoma.everyminute
    Program
    /bin/date
    StandardOutPath
    /Users/tjluoma/Desktop/test.txt
    StartCalendarInterval

            Hour
            12

Ceci crée/met à jour le fichier chaque minute

    Label
    com.tjluoma.everyminute
    Program
    /bin/date
    StandardOutPath
    /Users/tjluoma/Desktop/test.txt
    StartCalendarInterval

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