टास्क / ऐप चलने के दौरान मैक OSX को ऊपर और बिना सोए रखें


10

मैं rsync को wifi पर काम करना छोड़ देना चाहता हूँ क्योंकि AC पॉवर चालू कर देता है। लेकिन जब मैं ऐसा करता हूं तो मैक कुछ समय बाद कनेक्शन तोड़ देता है।

ऊर्जा सेटिंग फलक पर इसे "कंप्यूटर नेवर स्लीप", "जब संभव हो तो सोने के लिए हार्ड डिस्क डालें" और "नेटवर्क एक्सेस के लिए वेक" में कॉन्फ़िगर किया गया है।

साथ ही यह अच्छा होगा अगर टास्क पूरा होने के बाद मैक वास्तव में सो जाए।

मुझे लगता है कि एक बहुत ही समान प्रश्न पहले पूछा गया है और यह है कि pmset और insomniaX है , लेकिन मैं नहीं चाहता कि मशीन स्लीवलेस हो । और मैं अधिक से अधिक एक्सटेंशन स्थापित नहीं करना चाहता, और न ही हर बार पीएमएससेट के माध्यम से ट्वीक करना चाहता हूं।

मैं चाहता हूं कि यह मूल रूप से अपेक्षित व्यवहार करे - जब तक मैं इसे एक काम नहीं छोड़ता, तब तक जागते रहें और फिर "जब संभव हो" सो जाएं। यह समय rsync के कारण है, लेकिन अगली बार कुछ और हो सकता है।

क्या मैं हमेशा की तरह बहुत ज्यादा उम्मीद कर रहा हूं? क्या मैं इसे ठीक कर सकता हूँ? क्या यह भी टूट गया है?

जवाबों:


10

Caffeinate

उदाहरण के लिए:

caffeinate -i rsync -avz someuser@somehost:somefolder /some/local/folder

आदमी पृष्ठ से:

EXAMPLE
     caffeinate -i make
        caffeinate forks a process, execs "make" in it, and holds an
        assertion that prevents idle sleep as long as that process
        is running.

इसका उपयोग ऐसी स्थितियों के लिए भी किया जा सकता है जैसे "जब मैं यह फिल्म देख रहा हूं तो प्रदर्शन को सोने न दें":

caffeinate -d # in effect until you hit Ctrl+C

... या "अगले 10,000 सेकंड तक जागते रहें":

caffeinate -t 10000

man caffeinateविवरण के लिए देखें।


2
यह पागलपन की बात है! क्या यह किसी भी OSX पर डिफ़ॉल्ट है? किस संस्करण से? (मैं जल्दी से इस बारे में जानकारी नहीं पा सकता)
cregox

@ कवास - इस लेख के अनुसार, इसने माउंटेन लायन के साथ शिपिंग शुरू की: cnet.com/news/… मुझे इसके बारे में पता चला man pmset, जहाँ noidleविकल्प को पदावनत के रूप में सूचीबद्ध किया गया है।
नाथन लॉन्ग

इसके अलावा, यह अच्छा ट्यूटोरियल देखें: computers.tutsplus.com/tutorials/…
नाथन लॉन्ग

4

जिगलर को केवल "जिगल" माउस पर सेट किया जा सकता है जब वह चल रहा हो। यह स्क्रीन और कंप्यूटर को सोने से रोकेगा। यह ढक्कन बंद करने वाले लैपटॉप पर काम नहीं करेगा। उसके लिए आपको InsomniaX या किसी अन्य कस्टम आधारित अनुप्रयोग की आवश्यकता होगी।

यहाँ छवि विवरण दर्ज करें


कोई ढक्कन बंद नहीं, यह ठीक है। मैं ज़्यादा गरम नहीं करना चाहता।
क्रेगॉक्स

काम थोड़ा आवेदन, वास्तव में।
ayaz

खैर, जबकि मुझे इसकी दोबारा आवश्यकता नहीं है, यह वास्तव में मेरी समस्या का हल है, और यह एक अच्छा समाधान की तरह लगता है। मुझे लगता है कि मुझे इसे पहले ही स्वीकार कर लेना चाहिए था।
क्रैगॉक्स

2

एक अन्य विकल्प कैफीन है । यह एक ऐप है - एक एक्सटेंशन नहीं है - जो मशीन को निर्दिष्ट समय के लिए "सक्रिय" रखता है, जिसके बाद मशीन सामान्य रूप से जो कुछ भी कर सकती है वह है: खाली जाओ, स्क्रीनसेवर चलाओ, सो जाओ, आदि, यह जीता है ' t अपनी मशीन को सोने के लिए रखो, लेकिन इसे रहने दो। यह कार्यात्मक रूप से ऊर्जा बचतकर्ता सेटिंग को उस अवधि के लिए "कभी नहीं" के बराबर लगता है जो आप पूछते हैं, और बाद में उन्हें पुनर्स्थापित करते हैं।

यहाँ छवि विवरण दर्ज करें


लेकिन आपको अभी भी ऐप को शुरू और बंद करना होगा। आप इसे सेट नहीं कर सकते और भूल सकते हैं।
जोश के

1

आप एक स्टे-ओपन अप्प्लस्क्रिप्ट एप्लिकेशन बनाने पर विचार कर सकते हैं जो स्लीप टाइमर को रनिंग प्रोसेस के अस्तित्व के आधार पर सेट / रीसेट करता है। एक लॉन्च प्लिस्ट बनाना भी एक व्यवहार्य समाधान है, हालांकि मैं अभी भी वाक्य रचना पर अस्थिर हूं। "Pmset बल स्लीप एक्स" कमांड को रूट एक्सेस की आवश्यकता नहीं है, लेकिन सेटिंग्स को रिबूट पर रीसेट किया जाता है।

चूंकि आपकी स्थिति ऐसी लगती है कि मैं आपकी हर ज़रूरत का अनुमान नहीं लगा पाऊँगा, इसलिए मैं आपके लिए कुछ स्केच करूँगा।

property LoopTime: 5 --measured in seconds
property normalSleepTimeout: 30 --measured in minutes
property processName: "rsync"  --the name of the process you're trying to find

on run
   do shell script "pmset force sleep 0"  --disables sleep
   idle()
end

on idle
   if not appIsRunning() then 
      do shell script ("pmset force sleep " & normalSleepTimeout as string) -- sets sleep to desired idle timeout
      quit
   end
   return 
end

on appIsRunning()
   --Here's where you need to do the test that an app is running.  True needs to mean "the app is running".  Store the value to "result" or change the below return statement.

   return result
end

Rsync और पृष्ठभूमि प्रक्रियाओं जैसी चीज़ों के लिए, आपको अधिक चतुर और पोल $ जैसे अन्य कार्यों को करने की आवश्यकता होगी।

set result to False
if 0 < (count of (do shell script ("top -l 1 | grep" & processName as string))) then
   set result to True
end

ध्यान दें कि उपरोक्त मामले में, अगर rsyncd चल रहा है तो सिर्फ "rsync" की खोज करने से एक झूठी सकारात्मक वापस आ जाएगी क्योंकि "rsync" और "rsyncd" दोनों मेल खाते हैं। यदि यह आपके लिए काम नहीं करता है, तो आपको अधिक मुश्किल हो सकता है।

यदि एप्लिकेशन एक विंडोड प्रक्रिया थी, तो मैं यह निर्धारित करने के लिए निम्नलिखित का उपयोग करूंगा कि क्या चल रहा है:

tell application "System Events" to set RunningAppNames to name of processes

या बंडल पहचानकर्ताओं के लिए (अधिक सटीक)

tell application "System Events" to set RunningBundles to bundle identifier of processes

मुझे अपने परिदृश्य के बारे में और बताएं और मैं कुछ और सटीक और अधिक लचीले यूजर इंटरफेस के साथ लिखने की कोशिश करूंगा।


बांध, मैं यहाँ एक बार कहा गया सब देख लूँगा, लेकिन इस सारी परेशानी से गुजरने के लिए धन्यवाद! मैं वास्तव में अभी के लिए स्क्रिप्ट लिखने पर विचार नहीं कर रहा हूं, हालांकि। :)
क्रैगॉक्स

मेरे उत्तर को गैर-नकारात्मक मूल्य तक वापस लाने के लिए धन्यवाद। मैं स्क्रिप्टिंग करके जीती हूं। मैं BASH के साथ भयानक हूं, लेकिन मैं AppleScript से बिल्कुल प्यार करता हूं और इससे टर्मिनल कमांड चला रहा हूं।
डॉटएचटीएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.