यह देखने के लिए कि क्या टाइम मशीन ने बैकअप समाप्त कर लिया है, यह देखने के लिए बैश कमांड है?


16

मैं एक स्क्रिप्ट लिख रहा हूं जो ssh का उपयोग करके मेरी टाइम मशीन निर्देशिका को दूरस्थ सर्वर पर rsycnc करेगी। मैंने एक शेल स्क्रिप्ट से AppleScript में स्विच किया है और फिर एक Apple स्क्रिप्ट पर वापस आ गया हूं और मुझे वास्तव में परवाह नहीं है कि समाधान की किस तरह की स्क्रिप्ट की आवश्यकता होगी।

मुझे कोड के इस छोटे से स्निपेट के साथ बैकअप प्रक्रिया शुरू करने में सफलता मिली है।

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

अब मैं जो करने की कोशिश कर रहा हूं, वह एक rsync कमांड है जो एक बार बैकअप पूरा हो गया है। क्या AppleScript में कोई साफ रास्ता है यह देखने के लिए कि क्या बैकअप प्रक्रिया पूरी हो गई है? या क्या एक अच्छा "हुक" है जिसे आप बैश में उपयोग करके देख सकते हैं कि क्या यह पूरा हो गया है?


मैं पूछूंगा कि मूल को केवल rsync क्यों नहीं किया जाता है - मैं यह पूछता हूं जहां तक ​​मैं समझता हूं कि rsync हार्ड लिंक निर्देशिकाओं को नहीं समझता है ताकि आप हर फ़ाइल की कई प्रतियाँ लेना समाप्त कर दें।
user151019

क्या आपके द्वारा निष्पादित प्रत्येक बैकअप का मतलब है, टाइम मशीन उन मूल फ़ाइलों के हार्ड लिंक के साथ बैकअप उत्पन्न करेगी जो पहले से ही बैकअप हैं? मैं यह पूछता हूं क्योंकि मैं टाइम मशीन से परिचित नहीं हूं। अगर ऐसा है, तो हां मैं मूल की नकल करूंगा। लेकिन मुझे पूरा यकीन है कि rsync के पास एक विकल्प है जो इसे हार्ड लिंक को पुनः प्राप्त करने पर ध्यान नहीं देगा।
व्हाइटनीज

1
हां, यह है कि TM कैसे काम करता है - rsync हार्ड फ़ाइल लिंक को समझ सकता है, लेकिन मुझे नहीं लगता कि हार्ड डायरेक्टरी लिंक को समझता है जो 10,5 से OSX के लिए अद्वितीय हैं
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

पागल है कि यह स्पष्ट रूप से अनिर्दिष्ट है!
जिग

5

तुम भी बैकअप के साथ शुरू कर सकते हैं tmutil startbackup -b-bबैकअप समाप्त होने तक कमांड को ब्लॉक करता है।


3

tmutil status|grep -c "Running = 1"

दौड़ते समय '1' देता है, जब नहीं '0'।


3

बैकअप से संबंधित प्रक्रियाओं की अनुपस्थिति का आश्वासन नहीं है कि एक टाइम मशीन बैकअप पूरा हो गया है

वॉल्यूम पर किस समय मशीन अपने बैकअप लिखती है: साथ /Latest/... निर्देशिका, विचार करें:

  • ... .inProgress/... बंडल।

यदि वह बंडल मौजूद है, तो एक बैकअप अधूरा है।


ध्यान दें कि भले ही कोई .inProgressनिर्देशिका न हो, लेकिन टाइम मशीन अभी भी बैकअप के बाद तैयारी करने या तैयार करने में व्यस्त हो सकती है (जैसे पुराने बैकअप को हटाना)।
14

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तक प्रतीक्षा कर सकते हैं जब तक कि प्रक्रिया समाप्त न हो जाए। तर्कों के बिना यह बस इंतजार करेगा; यदि आप पीआईडी ​​प्रदान करते हैं तो आप इसका रिटर्न वैल्यू (निकास स्थिति) प्राप्त कर सकते हैं।

विशेष रूप से, wait $!उस शेल में शुरू हुई अंतिम प्रक्रिया का इंतजार करेंगे। हालाँकि, जैसा कि लॉरी ने उल्लेख किया है, यह प्रतीक्षा समय मशीन समाप्त होने से पहले वापस आ जाएगी क्योंकि बैकअप करने से पहले बैकअप-हेल्पर खत्म हो जाता है। मैं किसी भी प्रक्रिया के नाम को खोजने में सक्षम नहीं था जिसने संकेत दिया कि बैकअप पूर्ण नहीं था।

/Var/logs/system.log (या कंसोल के माध्यम से) की सामग्री को देखते हुए, मैंने देखा कि जब बैकअप समाप्त हो जाता है, तो अंतिम कार्य जो किया जाता है वह टाइम मशीन डिस्क छवि को अस्वीकार करना है। इतना ज़रूर है कि मैंने जाँच की कि (यह OS X 10.6.8 है) बैकअप के दौरान ए /Volumes/Time Machine Backups। इस प्रकार आप बस जाँच कर सकते हैं कि क्या निर्देशिका मौजूद है। जब यह नहीं रह जाता है, तो टाइम मशीन समाप्त हो जाती है।

मुझे यकीन नहीं है कि यह सभी के लिए काम करेगा क्योंकि मैंने नेटवर्क पर विंडोज मशीन पर बैकअप के लिए यहां निर्देशों का पालन ​​किया है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.