Est-ce que LaunchAgent empêche l'exécution répétitive des emplois?

Je souhaite automatiser l'exécution d'un long travail. Il devrait être lancé une fois par jour, mais seulement si le travail antérieur n'est toujours pas en cours d'exécution. Puis-je accomplir cela avec launchd et comment?

Oui, launchd vous garantit que vous n'avez qu'une instance de l'agent en cours d'exécution et que vous le faites automatiquement. Réglez votre travail normalement à l'aide de StartInterval pour planifier l'exécution de votre travail en arrière-plan et le système ne lancera pas une nouvelle instance si l'instance précédente n'a pas été complétée au moment où elle arrive à l'intervalle de début programmé.

Si plusieurs intervalles de planification passent, launchd exécutera une seule nouvelle instance à l'intervalle suivant. C'est «intelligent» à ce sujet.

Voici un exemple de plist:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd "> <plist version="1.0"> <dict> <key>Label</key> <ssortingng>com.mycompany.test</ssortingng> <key>ProgramArguments</key> <array> <ssortingng>/some/path/to/a/script.sh</ssortingng> </array> <key>StartInterval</key> <integer>60</integer> </dict> </plist> 

Dans l'exemple ci-dessus, si /some/path/to/a/script.sh prend 361 secondes pour s'exécuter, launchd ne démarrera pas 5 nouvelles instances pendant ce timeout, et il ne démarrera qu'une nouvelle instance au 420'th Deuxième note dans le time.

Le libellé de la page manuelle launchd.plist (5) indique autant, mais la façon dont elle est écrite le rend non évident:

StartInterval

Cette touche facultative fait démarrer le travail toutes les N secondes. Si le système est endormi, le travail sera démarré la prochaine fois que l'ordinateur se réveillera. Si des intervalles multiples surviennent avant que l'ordinateur ne se réveille, ces events seront regroupés en un seul événement après le réveil du sumil.

Cette dernière phrase dit essentiellement que " launchd rend votre job unique pour vous aussi longtime que vous suivez les règles pour un bon comportement professionnel ".