J'écris un script qui va rsycnc mon répertoire Time Machine sur un serveur distant en utilisant ssh. Je suis passé d'un script shell à un AppleScript, puis je suis revenu à un script Apple et je ne me soucie pas vraiment du type de script dont la solution aura besoin.
J'ai réussi à démarrer le processus de sauvegarde avec ce petit extrait de code.
do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"
Ce que j'essaie de faire maintenant, c'est d'exécuter une commande rsync une fois cette sauvegarde terminée. Existe-t-il un moyen propre dans AppleScript de vérifier si le processus de sauvegarde est terminé? Ou existe-t-il un bon "crochet" que vous pouvez utiliser dans bash pour vérifier s'il est terminé?
backup
time-machine
applescript
bash
Whitneyz
la source
la source
Réponses:
Voici une façon - je sais que c'est loin d'être une solution «appropriée», mais j'imagine que cela fonctionnerait.
ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'
Ce qu'il fait, c'est rechercher dans la liste des processus le processus backupd-helper, puis filtrer la commande grep elle-même de ne pas apparaître. Si la commande renvoie> 0 résultats, le processus backupd-helper est toujours actif. Sinon, le processus est terminé et vous pouvez donc supposer que c'est fait.
la source
pgrep backupd-helper
TIME_MACHINE_PID=$! wait $TIME_MACHINE_PID
dans une réponse séparée? Je vous remercie.tmutil status
est la voie Lion maintenant que nous avons un bel outil pour ce genre de requête.Sur les systèmes d'exploitation plus récents, il existe une commande non documentée
tmutil currentphase
qui affiche le nom de la phase en cours.la source
tmutuil
c'est tellement plein de victoires, il est difficile d'exprimer à quel point il est agréable de jeter un œil à l'état de sauvegarde, aux statistiques et de piloter les choses par programme.Vous pouvez également démarrer la sauvegarde avec
tmutil startbackup -b
.-b
bloque la commande jusqu'à la fin de la sauvegarde.la source
tmutil status|grep -c "Running = 1"
renvoie «1» lors de l'exécution, «0» dans le cas contraire.
la source
L'absence de processus liés à la sauvegarde ne garantit pas qu'une sauvegarde Time Machine est terminée
Sur le volume sur lequel Time Machine écrit ses sauvegardes: à côté du
/Latest/
répertoire……, considérons:.inProgress/
…… paquet.Si cet ensemble existe, une sauvegarde est incomplète.
la source
.inProgress
répertoire, Time Machine peut toujours être occupé à préparer ou à nettoyer après une sauvegarde (par exemple, supprimer les anciennes sauvegardes).Le travail suivant pour moi ...
Script backup_status:
Script backup_wait:
la source
tmutils
n'existe qu'à partir de 10.7. Avant cela, vous pouvez utiliser, comme mentionné,/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper
pour exécuter manuellement Time Machine.Vous pouvez ensuite utiliser
wait
pour attendre la fin du processus. Sans arguments, il attendra simplement; si vous fournissez le PID, vous pouvez obtenir sa valeur de retour (état de sortie).En particulier,
wait $!
attendra le dernier processus démarré dans ce shell. Cependant, comme Lauri l'a mentionné, cette attente reviendra avant la fin de Time Machine, car backupd-helper se termine avant la fin de la sauvegarde. Je n'ai pas pu trouver de nom de processus indiquant que la sauvegarde n'était pas terminée.En regardant le contenu de /var/logs/system.log (ou via la console), j'ai remarqué que lorsque la sauvegarde est terminée, la dernière chose qui est faite est d'éjecter l'image disque de Time Machine. Effectivement, j'ai vérifié que (c'est OS X 10.6.8) pendant la sauvegarde il y a un
/Volumes/Time Machine Backups
. Ainsi, vous pouvez simplement vérifier si le répertoire existe. Quand ce n'est plus le cas, Time Machine est terminé.Je ne sais pas si cela fonctionnera pour tout le monde puisque j'ai suivi les instructions ici pour sauvegarder sur une machine Windows sur le réseau.
la source