รักษา Mac OSX และไม่ทำงานขณะที่งาน / แอปทำงานอยู่


10

ฉันต้องการที่จะให้ rsync ทำงานผ่าน wifi ได้นานหลายชั่วโมงเพื่อเปิดไฟ AC แต่เมื่อฉันทำเช่นนั้น Mac จะหยุดการเชื่อมต่อหลังจากผ่านไประยะหนึ่ง

ในบานหน้าต่างการตั้งค่าพลังงานจะกำหนดค่าเป็น "Computer Never Sleep", "ใส่ฮาร์ดดิสก์เข้าสู่โหมดสลีปเมื่อทำได้" และ "Wake for access access"

นอกจากนี้ยังเป็นการดีถ้าแม็คเข้าสู่โหมดสลีปเมื่องานเสร็จ

ฉันตระหนักดีที่คล้ายกันมากคำถามที่ได้รับการถามก่อนและนั่นก็คือ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

@Cawas - ตามบทความนี้มันเริ่มจัดส่งกับ Mountain Lion: cnet.com/news/ ......ฉันพบข้อมูลเกี่ยวกับมันจากman pmsetที่noidleตัวเลือกถูกระบุว่าเลิกใช้แล้ว
Nathan Long

นอกจากนี้ดูบทแนะนำที่ดีนี้: computers.tutsplus.com/tutorials/…
นาธานลอง

4

Jigglerสามารถตั้งค่าเป็น " jiggle " เท่านั้นเมื่อใช้งาน นี่จะเป็นการป้องกันไม่ให้หน้าจอและคอมพิวเตอร์เข้าสู่โหมดสลีป สิ่งนี้จะไม่ทำงานบนแล็ปท็อปที่มีการปิดฝา สำหรับสิ่งที่คุณต้องการ InsomniaX หรือแอปพลิเคชันอื่นที่ใช้ kext

ป้อนคำอธิบายรูปภาพที่นี่


ไม่ต้องปิดฝาเลย ฉันไม่ต้องการความร้อนมากเกินไป
cregox

แอพพลิเคชั่นเล็ก ๆ น้อย ๆ ที่มีประโยชน์แน่นอน
ayaz

ในขณะที่ฉันไม่ต้องการมันอีกแล้วนี่แก้ปัญหาของฉันได้จริงและดูเหมือนว่าจะเป็นทางออกที่ดี ฉันเดาว่าฉันควรจะยอมรับแบบนี้มาก่อน
cregox

2

ทางเลือกหนึ่งคือคาเฟอีน มันเป็นแอพ - ไม่ใช่ส่วนขยาย - ซึ่งทำให้เครื่อง "แอคทีฟ" ตามระยะเวลาที่กำหนดหลังจากนั้นเครื่องสามารถทำสิ่งต่าง ๆ ตามปกติ: ไปที่ว่าง, รันสกรีนเซฟเวอร์, สลีปและอื่น ๆ นั่นคือมันชนะ ' อย่าให้เครื่องนอนหลับ แต่จะปล่อยให้เครื่องทำงาน ดูเหมือนว่าเทียบเท่ากับการตั้งค่าการประหยัดพลังงานเป็น "ไม่เคย" สำหรับช่วงเวลาที่คุณขอและกู้คืนพวกเขาในภายหลัง

ป้อนคำอธิบายรูปภาพที่นี่


แต่คุณยังต้องเริ่มและหยุดแอพ คุณไม่สามารถตั้งค่าและลืม
Josh K

1

คุณอาจพิจารณาสร้างแอปพลิเคชัน Stay-Open Applescript ที่ตั้งค่า / รีเซ็ตตัวจับเวลาพักเครื่องโดยพิจารณาจากกระบวนการที่กำลังทำงานอยู่ การสร้าง Plist Plist เป็นโซลูชันที่ทำงานได้ แต่ฉันยังคงสั่นคลอนในไวยากรณ์ คำสั่ง "pmset force sleep X" ไม่ต้องการการเข้าถึงรูท แต่การตั้งค่าจะถูกรีเซ็ตเมื่อรีบูต

เนื่องจากสถานการณ์ของคุณดูเหมือนว่าฉันจะไม่สามารถคาดการณ์ความต้องการของคุณได้ทั้งหมดฉันจะร่างบางสิ่งออกมาสำหรับคุณ

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 และพื้นหลังคุณจะต้องได้รับฟังก์ชั่นที่ชาญฉลาดและโพลเช่น $ top

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

โปรดสังเกตว่าในกรณีข้างต้นการค้นหาเพียง "rsync" จะคืนค่าเป็นบวกหาก rsyncd กำลังทำงานอยู่เพราะทั้งคู่ "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

บอกฉันเพิ่มเติมเกี่ยวกับสถานการณ์ของคุณและฉันจะพยายามเขียนสิ่งที่แน่นอนยิ่งขึ้นและด้วยส่วนต่อประสานผู้ใช้ที่ยืดหยุ่นมากขึ้น


เขื่อนฉันจะดูทุกอย่างที่คุณพูดที่นี่อีกครั้ง แต่ขอบคุณสำหรับปัญหาทั้งหมดนี้! ตอนนี้ฉันไม่ได้คิดจะเขียนสคริปท์ :)
cregox

ขอบคุณที่ทำให้คำตอบของฉันกลับมาเป็นค่าที่ไม่เป็นลบ ฉันใช้ชีวิตโดยการเขียนสคริปต์ ฉันแย่มากกับ BASH แต่ฉันรัก AppleScript อย่างยิ่งและใช้คำสั่ง Terminal จากนั้น
dotHTM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.