J'ai un cron-like launchd script ( StartCalendarInterval
) qui fait une sauvegarde de certaines données du site web une fois par jour :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.backup</string>
<key>ProgramArguments</key>
<array>
<string>/Volumes/Example/backup.sh</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</array>
<key>StandardErrorPath</key>
<string>/var/log/com.example/backup_error</string>
<key>StandardOutPath</key>
<string>/var/log/com.example/backup_output</string>
</dict>
</plist>
Dans de rares cas, il peut se produire un problème lorsque l'Internet n'est pas disponible. Le backup.sh script définit alors un code d'erreur approprié qui est plus grand que 0.
Maintenant je voudrais que le script soit automatiquement relancé une heure plus tard après une erreur. Et encore et encore jusqu'à ce qu'il n'y ait plus d'erreur. Mais pas après 24 heures pour éviter que deux instances du script s'exécutent en même temps.
Je pense que cela doit être possible avec ThrottleInterval
y SuccessfulExit
. Mon problème est que SuccessfulExit
est lié à KeepAlive
. Je ne veux pas que le script s'exécute tout le temps, mais juste une fois par jour via la fonction StartCalendarInterval
.
Ma tâche est-elle réalisable directement avec launchd ? Ou dois-je simplement ajouter wait 1 hour and try again after error
à mon script ? Le script aurait besoin de ressources en permanence lorsqu'il est configuré de cette manière. Je voudrais éviter cela.