Mantenere Mac OSX attivo e inattivo mentre l'attività / app è in esecuzione


10

Voglio lasciare rsync funzionante tramite Wi-Fi per ore acceso l'alimentazione CA. Ma quando lo faccio, il Mac interrompe la connessione dopo qualche tempo.

Nel riquadro Impostazioni energia è configurato su "Computer Never Sleep", "Metti il ​​disco rigido in stop quando possibile" e "Riattiva per l'accesso alla rete".

Inoltre sarebbe bene se il mac effettivamente si addormentasse una volta terminato il compito.

Mi rendo conto che una domanda molto simile è stata posta prima e che ci sono pmset e insonniaX , ma non voglio che la macchina sia insonne . E non voglio continuare a installare sempre più estensioni, né dover modificare ogni volta pmset.

Voglio che si comporti in modo nativo come previsto: rimani sveglio mentre lo lascio eseguire un'attività e poi vai a dormire "quando possibile". Questa volta è dovuto a rsync, ma la prossima volta potrebbe essere qualcos'altro.

Mi aspetto troppo come al solito? Posso ripararlo? È persino rotto?

Risposte:


10

caffeinate

Per esempio:

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

Dalla pagina man:

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.

Può anche essere usato per situazioni come "non lasciare che il display dorma mentre guardo questo film":

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

... o "resta sveglio per i prossimi 10.000 secondi":

caffeinate -t 10000

Vedi man caffeinateper i dettagli.


2
Questo è follemente fantastico! Questo è predefinito su qualche OSX? Da quale versione? (Non sono riuscito a trovare rapidamente informazioni al riguardo)
cregox

@Cawas - secondo questo articolo, ha iniziato a essere spedito con Mountain Lion: cnet.com/news/… Ho scoperto da questo man pmset, dove l' noidleopzione è elencata come obsoleta.
Nathan Long,

Inoltre, guarda questo simpatico tutorial: computers.tutsplus.com/tutorials/…
Nathan Long

4

Jiggler può essere impostato per "muovere" il mouse solo quando è in esecuzione. Ciò impedirà lo schermo e il computer di dormire. Questo non funzionerà su un laptop con il coperchio chiuso. Per questo avresti bisogno di InsomniaX o di un'altra applicazione basata su kext.

inserisci qui la descrizione dell'immagine


Nessun coperchio chiuso, va bene. Non voglio surriscaldarmi.
Cregox,

Pratica piccola applicazione, davvero.
Ayaz,

Bene, anche se non ne ho più bisogno, questo in realtà ha risolto il mio problema e sembra una buona soluzione. Immagino che avrei dovuto accettarlo molto prima.
Cregox,

2

Un'altra alternativa è la caffeina . È un'app - non un'estensione - che mantiene la macchina "attiva" per un determinato periodo di tempo, dopodiché la macchina può fare tutto ciò che farebbe normalmente: andare in bianco, eseguire screensaver, dormire, ecc. Cioè, ha vinto ' metti la tua macchina in pausa, ma la lascerà. Sembra funzionalmente equivalente a impostare le impostazioni di risparmio energetico su "mai" per il periodo richiesto e ripristinarle in seguito.

inserisci qui la descrizione dell'immagine


Ma devi ancora avviare e interrompere l'app. Non puoi impostarlo e dimenticare.
Josh K,

1

Potresti prendere in considerazione la possibilità di creare un'applicazione Aplescript Stay-Open che imposta / reimposta il timer di spegnimento in base all'esistenza di un processo in esecuzione. La creazione di un programma di avvio è anche una soluzione praticabile, tuttavia sono ancora traballante sulla sintassi. Il comando "pmset force sleep X" non richiede l'accesso come root, ma le impostazioni vengono ripristinate al riavvio.

Dato che la tua situazione sembra che non sarò in grado di anticipare ogni tua esigenza, disegnerò qualcosa per te.

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

Per cose come rsync e processi in background, dovrai ottenere più intelligente e sondare altre funzioni come $ 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

Si noti che nel caso precedente, la ricerca del solo "rsync" restituirà un falso positivo se rsyncd è in esecuzione perché "rsync" e "rsyncd" corrispondono. Potrebbe essere necessario diventare più complicato se questo non funziona per te.

Se l'applicazione fosse un processo con finestre, utilizzerei quanto segue per determinare cosa è in esecuzione:

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

O per identificatori di bundle (più preciso)

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

Dimmi di più sul tuo scenario e proverò a scrivere qualcosa di più esatto e con un'interfaccia utente più flessibile.


Accidenti, guarderò tutto quello che hai detto qui un'altra volta, ma grazie per aver superato tutti questi problemi! Per ora non sto davvero prendendo in considerazione la possibilità di scrivere script. :)
cregox,

Grazie per riportare la mia risposta a un valore non negativo. Vivo scrivendo. Sono terribile con BASH, ma adoro assolutamente AppleScript e far funzionare i comandi Terminal da esso.
dotHTM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.