Question

J'écris un script qui rsycnc mon répertoire Time Machine à un serveur distant en utilisant ssh. Je suis passé d'un script shell à un AppleScript, puis revenir à un Apple script et je ne me soucie pas vraiment ce type de script nécessitera la solution.

J'ai eu le succès de commencer le processus de sauvegarde avec ce petit bout de code.

do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"

Ce que je suis en train de faire est maintenant avoir une commande rsync effectuée une fois que la sauvegarde est terminée. Y at-il moyen propre à AppleScript pour vérifier si le processus de sauvegarde est terminée? Ou est-il un bon « crochet » que vous pouvez utiliser dans bash pour vérifier si elle est terminée?

Était-ce utile?

La solution

Voici une façon -. Je sais qu'il est loin d'être une solution « appropriée », mais je pense que cela fonctionnerait

ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'

Ce qu'il fait est une recherche dans la liste des processus pour le processus backupd-aide, puis filtre la commande grep lui-même d'apparaître. Si la commande retourne> 0 résultats, le processus backupd-aide est toujours actif. Dans le cas contraire, le processus a pris fin, et donc vous pouvez supposer qu'il est fait.

Autres conseils

tmutil status est le chemin Lion maintenant que nous avons un outil agréable pour ce genre de requête.

Vous pourriez également lancer la sauvegarde avec tmutil startbackup -b. -b blocs de la commande jusqu'à ce que la sauvegarde soit terminée.

Absence de processus liées à la sauvegarde est pas l'assurance qu'une sauvegarde Time Machine est terminée

Sur le volume auquel Time Machine écrit ses sauvegardes: à côté de la ... /Latest/ ... répertoire, pensez à:

  • ... .inProgress/ ... bundle.

Si ce paquet existe, une sauvegarde est incomplète.

tmutil status|grep -c "Running = 1"

retourne '1' lors de l'exécution, '0' si non.

Les travaux suivants pour moi ...


Script backup_status:

    #!/usr/bin/env bash
    #
    # Determines if Time Machine is running and works with older Mac OS x versions
    #
    if [ x == x`type -P tmutil` ]; then
            # Older OSx
            count=`ps -ef | grep -v grep | grep -c 'CoreServices/backupd'`
            # Should also detect /Volume/Time Machine …/Latest/… directory ….inProgress/… bundle existence here to make it tight.
    else
            # OSx 10.7+
            count=`tmutil status | grep -c "Running = 1"`
    fi

    if [ $count == 0 ]; then
            echo stopped
    else
            echo running
    fi

Script backup_wait:

    #!/usr/bin/env bash

    #
    # Waits for Time Machine backup to complete
    #
    while [ `backup_status` == running ] ; do
            sleep 2
    done

tmutils existe que de 10,7 sur. Avant que vous pouvez utiliser, comme mentionné, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper à Time Machine exécuter manuellement.

Vous pouvez ensuite utiliser wait attendre jusqu'à ce que le processus soit terminé. Sans arguments il suffit d'attendre; si vous fournissez le PID, vous pouvez obtenir la valeur de retour (état de sortie).

En particulier, wait $! attendra le dernier processus a commencé dans cette coquille. Cependant, comme mentionné Lauri, cette attente sera de retour avant la machine de temps est terminé parce que les finitions backupd auxiliaires avant la sauvegarde se fait. Je ne pouvais pas trouver un nom de processus qui a indiqué que la sauvegarde n'a pas été complète.

En regardant le contenu de /var/logs/system.log (ou via la console), je remarque que lorsque la sauvegarde est terminée, la dernière chose qui est fait est d'éjecter la machine temps image disque. Effectivement j'ai vérifié que (ce qui est OS X 10.6.8) lors de la sauvegarde il y a un /Volumes/Time Machine Backups. Ainsi, vous pouvez simplement vérifier si le répertoire existe. Quand il ne fait plus, Time Machine est terminée.

Je ne sais pas si cela fonctionnera pour tout le monde depuis que j'ai suivi les directions ici pour la sauvegarde sur une machine windows sur le réseau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à apple.stackexchange
scroll top