Есть ли команда Bash, чтобы проверить, закончил ли Time Machine резервное копирование?
-
16-10-2019 - |
Вопрос
Я пишу сценарий, который приведет к тому, что мой каталог Time Machine на удаленный сервер с помощью SSH. Я перешел от скрипта оболочки на AppleScript, а затем вернулся к сценарию Apple, и мне не волнует, какой сценарий потребуется решение.
У меня был успех, начав процесс резервного копирования с этого маленького фрагмента кода.
do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"
Теперь я пытаюсь сделать команду RSYNC, выполненную после завершения резервной копии. Есть ли какой -нибудь чистый способ в AppleScript, чтобы проверить, завершен ли процесс резервного копирования? Или есть хороший «крючок», который вы можете использовать в Bash, чтобы проверить, будет ли он завершен?
Решение
Вот один из способов - я знаю, что это далеко не «правильное» решение, но я думаю, что это сработает.
ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'
Что он делает, так это поиск в списке процессов для процесса Backupd-Helper, а затем отфильтровывает саму команду GREP. Если команда возвращает> 0 результатов, процесс Backupd-Helper все еще активен. Если нет, процесс закончился, и поэтому вы можете предположить, что это сделано.
Другие советы
tmutil status
Это Lion Way теперь, когда у нас есть хороший инструмент для такого рода запроса.
Вы также можете начать резервную копию с tmutil startbackup -b
. -b
блокирует команду, пока резервная копия не закончится.
Отсутствие процессов, связанных с резервным копированием, нет уверенность в том, что резервная копия машины времени завершена
На том томе, на который Машина пишет свои резервные копии: наряду с…/Latest/
… Справочник, подумайте:
- …
.inProgress/
… пучок.
Если этот пакет существует, резервная копия является неполной.
tmutil status|grep -c "Running = 1"
Возвращает «1» при запуске, «0», когда нет.
Следующая работа для меня ...
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
существует только с 10.7. Перед этим вы можете использовать, как уже упоминалось, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper
Чтобы вручную запустить машину времени.
Затем вы можете использовать wait
подождать, пока процесс не закончится. Без аргументов это просто будет ждать; Если вы предоставите PID, вы можете получить его возвратное значение (статус выхода).
Особенно, wait $!
Будет ждать последнего процесса, начатого в этой оболочке. Тем не менее, как упоминал Лаури, это ожидание вернется до того, как Time Machine закончится, потому что Backupd-Helper завершится до того, как будет выполнено резервная копия. Я не смог найти какое -либо имя процесса, которое указывало на то, что резервная копия не была завершена.
Глядя на содержимое /var/logs/system.log (или через консоль), я заметил, что когда резервное копирование закончено, последнее, что сделано, - это выбросить образ машины времени. Конечно, я проверил это (это OS X 10.6.8) во время резервной копии есть /Volumes/Time Machine Backups
. Анкет Таким образом, вы можете просто проверить, существует ли каталог. Когда это больше не происходит, Time Machine закончена.
Я не уверен, сработает ли это для всех с тех пор, как я следовал указаниям здесь Для резервного копирования на машине Windows в сети.