Підтримуючи Mac OSX без роботи і безсонним, поки виконується завдання / додаток


9

Я хочу залишити rsync працювати над Wi-Fi протягом годин, включених живлення змінного струму. Але коли я це роблю, Mac через деякий час розриває з'єднання.

На панелі "Налаштування енергії" він налаштований на "Комп'ютер ніколи не спить", "Покладіть жорсткий диск у режим сну, коли це можливо" та "Пробудьте доступ до мережі".

Плюс було б добре, якби мак насправді лягає спати, коли завдання виконане.

Я усвідомлюю, що дуже подібне запитання було задано і раніше, і є pmset та безсонняX , але я не хочу, щоб машина була безсонною . І я не хочу продовжувати встановлювати все нові і нові розширення, і не потрібно щоразу змінювати pmset.

Я хочу, щоб він по-справжньому поводився так, як очікувалося - залишайтеся неспанням, поки я залишаю його виконувати завдання, а потім лягайте спати «коли це можливо». Цей час пов'язаний з rsync, але наступного разу може бути щось інше.

Я чекаю занадто багато, як зазвичай? Чи можна це виправити? Це навіть зламано?

Відповіді:


9

Кофеїн

Наприклад:

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

... або "не спати протягом наступних 10000 секунд":

caffeinate -t 10000

Детальніше man caffeinateдив.


2
Це шалено дивовижно! Це за замовчуванням на будь-якій ОСX? З якої версії? (Я не зміг швидко знайти інформацію про це)
cregox

@Cawas - згідно з цією статтею він розпочав доставку з Mountain Lion: cnet.com/news/… Я дізнався про це звідки man pmset, де noidleпараметр вказаний як застарілий.
Натан Лонг

Також дивіться цей приємний підручник: computers.tutsplus.com/tutorials/…
Натан Лонг

4

Jiggler можна налаштувати лише на те, щоб він "переміщав" мишу, коли він працює. Це запобіжить сну екрана та комп'ютера. Це не працюватиме на ноутбуці із закритою кришкою. Для цього вам знадобиться InsomniaX або інша програма на основі кексту.

введіть тут опис зображення


Не закривайте кришку, це добре. Я не хочу перегріватися.
Крегокс

Дійсно, мало додатків.
аяз

Ну, хоча мені це знову не потрібно, це фактично вирішило мою проблему, і це здається приємним рішенням. Напевно, я мав би прийняти це так раніше.
Крегокс

2

Ще одна альтернатива - кофеїн . Це додаток, а не розширення, яке підтримує машину "активною" протягом певного періоду часу, після чого машина може робити все, що зазвичай робило: вийти з пустого, запустити заставку, заснути тощо. Тобто це виграло " не покладіть машину спати, але дозвольте їй. Це здається функціонально еквівалентним встановленню налаштувань енергозбереження на "ніколи" протягом періоду, який ви просите, і відновлення їх після цього.

введіть тут опис зображення


Але ви все ще повинні запустити та зупинити додаток. Ви не можете встановити його і забути.
Джош К

1

Ви можете подумати про створення додатка Applecript Stay-Open, який встановлює / скидає таймер сну на основі наявності запущеного процесу. Створення запущеного списку - це також життєздатне рішення, однак я все ще хитну по синтаксису. Команда "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" відповідають. Можливо, вам доведеться стати більш хитрими, якщо це не допоможе вам.

Якщо додаток був процесом Windowed, я б скористався наступним, щоб визначити, що працює:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.