Time Machine 백업이 완료되었는지 확인하는 bash 명령이 있습니까?


16

ssh를 사용하여 Time Machine 디렉토리를 원격 서버에 rsycnc하는 스크립트를 작성 중입니다. 쉘 스크립트에서 AppleScript로 전환 한 다음 Apple 스크립트로 다시 전환했는데 솔루션에 어떤 종류의 스크립트가 필요한지 실제로 신경 쓰지 않습니다.

이 작은 코드 조각으로 백업 프로세스를 시작하는 데 성공했습니다.

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

내가 지금하려는 것은 백업이 완료되면 rsync 명령을 수행하는 것입니다. AppleScript에서 백업 프로세스가 완료되었는지 확인하는 확실한 방법이 있습니까? 또는 bash에서 완료되었는지 확인할 수있는 좋은 "후크"가 있습니까?


왜 원본을 rsync하지 않는지 묻습니다. rsync가 하드 링크 디렉토리를 이해하지 못하는 한 모든 파일의 사본을 여러 개 가져갈 수 있습니다.
Mark

Time Machine이 수행되는 각 연속 백업에서 이미 백업 된 원본 파일에 대한 하드 링크를 사용하여 백업을 생성한다는 의미입니까? Time Machine에 익숙하지 않기 때문에 이것을 묻습니다. 이 경우 원본을 복사하겠습니다. 그러나 rsync에는 하드 링크 재생성을 무시하는 옵션이 있습니다.
whitneyz

1
그렇습니다. TM의 작동 방식입니다. rsync는 하드 파일 링크를 이해할 수 있지만 10,5부터 OSX에 고유 한 하드 디렉토리 링크를 이해하지 못한다고 생각합니다
Mark

답변:


4

여기에 한 가지 방법이 있습니다. "적절한"솔루션 근처에 있지 않다는 것을 알고 있지만 그것이 효과가있을 것 같습니다.

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

그것이하는 일은 백업 도우미 프로세스에 대한 프로세스 목록을 검색 한 다음 grep 명령 자체가 표시되지 않도록 필터링하는 것입니다. 명령이> 0 개의 결과를 반환하면 백업 도우미 프로세스는 계속 활성화됩니다. 그렇지 않은 경우 프로세스가 종료되었으므로 완료된 것으로 가정 할 수 있습니다.


1
...pgrep backupd-helper
Jason Salaz

1
더 우아한 방법을 찾았습니다! TIME_MACHINE_PID = $! $ TIME_MACHINE_PID 대기
whitneyz

1
@whitneyz TIME_MACHINE_PID=$! wait $TIME_MACHINE_PID별도의 답변으로 자세히 설명해 주 시겠습니까? 감사합니다.
Graham Perrin

17

tmutil status 이런 종류의 쿼리를위한 훌륭한 도구가되었습니다.


그렇습니다- tmutuil승리로 가득 차 있습니다. 백업 상태, 통계를 훔쳐보고 프로그래밍 방식으로 운전하는 것이 얼마나 멋진지를 표현하기가 어렵습니다.
bmike

문서화되지 않은 것 같습니다.
zigg

5

로 백업을 시작할 수도 있습니다 tmutil startbackup -b. -b백업이 완료 될 때까지 명령을 차단합니다.


3

백업 관련 프로세스가 없다고 해서 Time Machine 백업이 완료되었다고 보장 할 수는 없습니다

Time Machine이 백업을 쓰는 볼륨에서 /Latest/…… 디렉토리 와 함께 다음을 고려하십시오.

  • 합니다 ... .inProgress/... 번들.

해당 번들이 존재하면 백업이 완료되지 않은 것입니다.


2

tmutil status|grep -c "Running = 1"

실행하면 '1'을, 그렇지 않으면 '0'을 반환합니다.


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

tmutils10.7부터 존재합니다. 그 전에 언급했듯이 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperTime Machine을 수동으로 실행할 수 있습니다.

그런 다음 wait프로세스가 완료 될 때까지 기다릴 수 있습니다 . 논쟁이 없다면 그것은 단순히 기다릴 것이다. PID를 제공하면 반환 값 (종료 상태)을 얻을 수 있습니다.

특히, wait $!해당 쉘에서 시작된 마지막 프로세스를 기다립니다. 그러나 Lauri가 언급했듯이 백업이 완료되기 전에 백업 도우미가 완료되기 때문에 머신이 완료되기 전에이 대기가 리턴됩니다. 백업이 완료되지 않았 음을 나타내는 프로세스 이름을 찾을 수 없습니다.

/var/logs/system.log (또는 콘솔을 통해)의 내용을 보면 백업이 완료되면 마지막으로 수행되는 작업은 타임 머신 디스크 이미지를 추출하는 것입니다. 확실히 나는 백업하는 동안 (이것은 OS X 10.6.8 임) 확인했다 /Volumes/Time Machine Backups. 따라서 디렉토리가 존재하는지 간단히 확인할 수 있습니다. 더 이상 그렇지 않으면 Time Machine이 완료됩니다.

여기 의 지시 에 따라 네트워크의 Windows 시스템에 백업 한 이후 모든 사용자에게 이것이 효과가 있는지 확실하지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.