4 votes

Exécuter un job launchd après une sauvegarde Time Machine

Tout simplement, j'ai un processus qui est déclenché par launchd mais s'exécute actuellement une fois par heure, mais ce que je voudrais vraiment, c'est qu'il s'exécute une fois qu'une sauvegarde Time Machine est terminée.

Au départ, je pensais que je pouvais simplement définir ma sauvegarde Time Machine (/Volumes/Foo/Backups.backupdb/Haravikk's Mac) comme chemin de surveillance pour launchd, mais cela semble se déclencher beaucoup trop tôt. Il semble se déclencher à nouveau vers la fin, donc j'utilise actuellement un délai et je vérifie l'existence d'une sauvegarde .inprogress, mais ce n'est pas vraiment une solution idéale, et parfois l'étape de nettoyage de Time Machine déclenche le processus plusieurs fois.

Existe-t-il un chemin plus spécifique que je pourrais observer et qui déclencherait mon processus uniquement lorsque Time Machine a terminé une sauvegarde ?

Je réalise que je devrais quand même effectuer mes contrôles pour être sûr, mais actuellement mon processus se déclenche plusieurs fois par sauvegarde, ce qui n'est pas ce que je veux.

3voto

M K Points 10691

Une solution simple consiste à utiliser l'option tmutil pour déclencher manuellement la sauvegarde et la faire suivre de votre processus (dans le cadre d'un script shell qui effectue ces deux étapes).

  • Tout d'abord, désactivez les sauvegardes automatiques de Préférences système > Time Machine ou en utilisant la commande tmutil disable
  • Utilisez tmutil startbackup --auto --block pour déclencher une sauvegarde une fois par heure (l --block est nécessaire pour que l'exécution attende que la sauvegarde soit terminée).
  • Suivez cette démarche en lançant votre processus

Voir man tmutil pour plus d'informations sur l'utilisation de Time Machine à partir de la ligne de commande.

3voto

Haravikk Points 1128

Bon, après avoir mis en place un agent de lancement pour enregistrer les informations pendant un certain temps, j'ai trouvé une solution combinée.

Tout simplement, j'ai créé un agent de lancement qui surveille le fichier com.apple.TimeMachine.plist pour les mises à jour, comme ceci :

 <?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>org.example.backupd</string>
    <key>ProgramArguments</key>
    <array>
        <string>do something</string>
    </array>
    <key>WatchPaths</key>
    <array>
         <string>/Library/Preferences/com.apple.TimeMachine.plist</string>
     </array>
 </dict>
 </plist>

Ce fichier est mis à jour chaque fois que Time Machine effectue une sauvegarde, et s'exécute vers la fin (pendant l'étape de nettoyage/finalisation, je crois). En gardant cela à l'esprit, il est possible d'invoquer un script avec le chemin de surveillance ci-dessus qui vérifie si backupd est toujours en cours d'exécution ; si c'est le cas, le script dort pendant une minute et vérifie à nouveau, répétant jusqu'à ce que backupd a terminé, avant de poursuivre ce qu'il doit faire.

Cela permet maintenant de déclencher des actions post-sauvegarde telles que l'exécution de sauvegardes secondaires (dans mon cas via rsync vers un NAS), vérifier la taille de la dernière sauvegarde et d'autres choses pratiques.

Quoi qu'il en soit, cette solution semble être le meilleur moyen de le faire, car je n'ai pas pu trouver de chemin à surveiller qui se déclenche de manière fiable après la fin d'une sauvegarde, mais cela devrait s'exécuter assez près de la fin d'une sauvegarde pour être utile.

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