มีคำสั่ง 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 ไม่เข้าใจไดเรกทอรีฮาร์ดลิงก์เพื่อที่คุณจะได้สำเนาหลาย ๆ ไฟล์
user151019

คุณหมายถึงการสำรองข้อมูลต่อเนื่องที่ดำเนินการแต่ละครั้ง Time Machine จะสร้างการสำรองข้อมูลที่มีฮาร์ดลิงก์ไปยังไฟล์ต้นฉบับที่สำรองไว้แล้วหรือไม่ ฉันถามสิ่งนี้เพราะฉันไม่คุ้นเคยกับ Time Machine ถ้าเป็นเช่นนั้นใช่ฉันจะคัดลอกต้นฉบับ แต่ฉันค่อนข้างมั่นใจว่า rsync มีตัวเลือกที่จะทำให้ละเว้นการสร้างการเชื่อมโยงอย่างหนัก
whitneyz

1
ใช่นั่นคือวิธีการทำงานของ TM - rsync สามารถเข้าใจลิงก์ไฟล์อย่างหนัก แต่ฉันไม่คิดว่าจะเข้าใจลิงก์ฮาร์ดไดรฟ์ที่เป็นเอกลักษณ์ของ OSX ตั้งแต่ 10,5
user151019

คำตอบ:


4

นี่เป็นวิธีหนึ่ง - ฉันรู้ว่ามันไม่มีวิธีแก้ปัญหา "ที่เหมาะสม" แต่ฉันคิดว่ามันจะได้ผล

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

สิ่งที่ทำคือค้นหารายการกระบวนการสำหรับกระบวนการ backupd-helper จากนั้นกรองคำสั่ง grep ออกจากการแสดง หากคำสั่งส่งคืนผลลัพธ์> 0 กระบวนการ backupd-helper ยังคงทำงานอยู่ หากไม่เป็นเช่นนี้กระบวนการก็สิ้นสุดลงดังนั้นคุณอาจคิดว่าเสร็จสิ้น


1
...pgrep backupd-helper
Jason Salaz

1
ฉันพบวิธีที่หรูหรากว่า! TIME_MACHINE_PID = $! รอ $ TIME_MACHINE_PID
whitneyz

1
@ Whiteney โปรดช่วยอธิบายรายละเอียดTIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDในคำตอบแยกต่างหากได้ไหม? ขอขอบคุณ.
Graham Perrin

18

tmutil status เป็นวิธีสิงโตตอนนี้เรามีเครื่องมือที่ดีสำหรับการค้นหาประเภทนี้

บน OS ที่ใหม่กว่าจะมีคำสั่งที่ไม่มีเอกสาร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เพื่อเรียกใช้ Time 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.