Чи є команда bash, щоб перевірити, чи закінчила резервна копія Time Machine?


16

Я пишу сценарій, який буде rsycnc мій каталог Time Machine на віддалений сервер за допомогою ssh. Я перейшов з сценарію оболонки на AppleScript, а потім повернувся до сценарію Apple, і мені не дуже важливо, який сценарій потребуватиме рішення.

Я мав успіх у запуску резервного копіювання цього маленького фрагмента коду.

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

Зараз я намагаюся зробити команду rsync, виконану після того, як резервне копіювання буде завершено. Чи є в AppleScript чистий спосіб перевірити, чи завершено процес резервного копіювання? Або є хороший «гачок», який ви можете використовувати в bash, щоб перевірити, чи завершено це?


Я б запитав, чому б не просто rsync оригіналу - я запитую це, наскільки я розумію, rsync не розуміє каталогі жорстких посилань, щоб ви в кінцевому підсумку взяли кілька копій кожного файлу.
користувач151019

Ви маєте на увазі, що з кожною послідовною копією, яка виконується, Time Machine створить резервну копію із жорсткими посиланнями на вихідні файли, які вже були створені? Я запитую це, бо я не такий знайомий з машиною часу. Якщо це так, то так, я б скопіював оригінал. Але я майже впевнений, що у rsync є варіант, який змусить її ігнорувати відтворення жорстких посилань.
whitneyz

1
Так, TM працює - rsync може зрозуміти жорсткі посилання на файли, але я не думаю, що t розуміє посилання на жорсткі каталоги, які є унікальними для OSX з 10,5
user151019

Відповіді:


4

Ось один із способів - я знаю, що ніде немає "належного" рішення, але я думаю, що це спрацювало б.

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

Що це робиться - це пошук у списку процесів для процесу резервного копіювання резервного копіювання, а потім фільтрує команду grep, щоб не відображатися. Якщо команда повертає> 0 результатів, процес зберігання резервного копіювання все ще активний. Якщо ні, процес закінчився, і ви можете припустити, що він закінчений.


1
...pgrep backupd-helper
Джейсон Салаз

1
Я знайшов більш елегантний спосіб! TIME_MACHINE_PID = $! зачекайте $ TIME_MACHINE_PID
whitneyz

1
@whitneyz, будь ласка, ви могли б детальніше розповісти, TIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDможливо, в окремій відповіді? Дякую.
Грем Перрін

18

tmutil status це Левський шлях тепер, коли у нас є хороший інструмент для такого роду запитів.

У новіших ОС існує недокументована команда, tmutil currentphaseяка показує назву поточної фази.


Так - tmutuilнастільки повно виграшів, що важко висловити, як приємно зазирнути та тикати на статус резервного копіювання, статистику та керувати речами програмно.
bmike

Божевільний, що це, мабуть, недокументовано!
zigg

5

Ви також можете розпочати резервну копію tmutil startbackup -b. -bблокує команду, поки резервна копія не закінчена.



3

Відсутність процесів, пов'язаних із створенням резервного копіювання, не є впевненістю, що резервна копія Time Machine завершена

Щодо обсягу, до якого Time Machine пише резервні копії: поряд із /Latest/каталогом……, врахуйте:

  • і ... .inProgress/... розшарування.

Якщо цей пакет існує, резервна копія є неповною.


Зауважте, що навіть якщо немає .inProgressкаталогу, Time Machine все ще може бути зайнятий підготовкою або прибиранням після створення резервної копії (наприклад, видалення старих резервних копій).
gidds

1

Наступна робота для мене ...


Сценарій 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

Сценарій backup_wait:

    #!/usr/bin/env bash

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


0

tmutilsіснує лише з 10.7. До цього ви можете використовувати, як було сказано, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperвручну запустити машину часу.

Потім waitможна зачекати, поки процес закінчиться. Без аргументів він буде просто чекати; якщо ви надаєте PID, ви можете отримати його повернене значення (статус виходу).

Зокрема, wait $!буде чекати останнього процесу, розпочатого в цій оболонці. Однак, як згадувала Лаурі, це очікування повернеться до того, як машина часу закінчиться, оскільки допоміжна робота резервного копіювання закінчується до того, як буде зроблено резервне копіювання. Я не зміг знайти жодного імені процесу, який би вказував на те, що резервне копіювання не було завершено.

Переглядаючи вміст /var/logs/system.log (або через консоль), я помітив, що коли резервна копія закінчена, останнє, що робиться, - це витягнути образ диска машинки часу. Звичайно, я перевірив, що (це ОС X 10.6.8) під час резервного копіювання є /Volumes/Time Machine Backups. Таким чином, ви можете просто перевірити, чи існує каталог. Коли цього більше немає, машина часу закінчена.

Я не впевнений , якщо це буде працювати для всіх , так як я слідував вказівкам тут для резервного копіювання на комп'ютері Windows , в мережі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.