Garder Mac OSX actif et sans sommeil pendant que la tâche / l'application est en cours d'exécution

8

Je veux laisser rsync fonctionner pendant plusieurs heures avec le wifi, et le mettre sous tension. Mais lorsque je le fais, le Mac coupe la connexion après un certain temps.

Dans le volet Paramètres d’énergie, il est configuré comme suit: "Ordinateur ne se met jamais en veille", "Mettre le disque dur en veille si possible" et "Se réveiller pour accéder au réseau".

De plus, ce serait bien si le Mac s'endormait une fois la tâche terminée.

Je réalise un très similaire question ont déjà été posées et qu'il y a Pmset et insomnieX , mais je ne veux pas que la machine soit sans sommeil . Et je ne veux pas continuer à installer de plus en plus d’extensions, ni à modifier pmset à chaque fois.

Je veux qu'il se comporte nativement comme prévu - restez éveillé pendant que je le laisse exécuter une tâche, puis endormez-vous "lorsque cela est possible". Cette heure est due à rsync, mais la prochaine fois pourrait être autre chose.

Est-ce que j'attends trop, comme d'habitude? Puis-je le réparer? Est-ce même cassé?

cregox
la source

Réponses:

8

Caféine

Par exemple:

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

De la page de manuel:

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.

Il peut également être utilisé dans des situations telles que "ne laissez pas l'écran s'endormir pendant que je regarde ce film":

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

... ou "restez éveillé pendant les 10 000 prochaines secondes":

caffeinate -t 10000

Voir man caffeinate pour plus de détails.

Nathan Long
la source
2
C'est incroyablement génial! Est-ce par défaut sur un OSX? Depuis quelle version? (Je ne pouvais pas trouver rapidement des informations à ce sujet)
cregox
@Cawas - selon cet article, il a commencé à expédier avec Mountain Lion: cnet.com/news/… Je l'ai appris de man pmset, où le noidle L'option est répertoriée comme obsolète.
Nathan Long
Voir aussi ce joli tutoriel: computers.tutsplus.com/tutorials/…
Nathan Long
4

Jiggler peut être configuré pour ne "bouger" que la souris lorsqu'elle est en cours d'exécution. Cela empêchera l'écran et l'ordinateur de dormir. Cela ne fonctionnera pas sur un ordinateur portable avec le couvercle fermé. Pour cela, vous avez besoin d’InsomniaX ou d’une autre application basée sur kext.

enter image description here

Josh K
la source
Pas de couvercle fermé, c'est bien. Je ne veux pas surchauffer.
cregox
Petite application pratique, en effet.
ayaz
Eh bien, même si je n'en ai plus besoin, cela a résolu mon problème, et cela semble être une bonne solution. Je suppose que j'aurais dû l'accepter bien avant.
cregox
1

Vous pouvez envisager de créer une application Stay-Open Applescript qui définit / réinitialise le compteur de sommeil en fonction de l’existence d’un processus en cours. Créer une liste de diffusion est également une solution viable, mais je suis toujours fragile en termes de syntaxe. La commande "pmset force sleep X" ne nécessite pas d'accès root, mais les paramètres sont réinitialisés au redémarrage.

Puisque votre situation semble ne pas pouvoir anticiper tous vos besoins, je vais vous donner un aperçu.

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

Pour des tâches telles que rsync et les processus en arrière-plan, vous devrez faire preuve de plus d'intelligence et interroger d'autres fonctions telles que $ 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

Notez que dans le cas ci-dessus, la recherche de "rsync" seulement renvoie un faux positif si rsyncd est en cours d'exécution, car "rsync" et "rsyncd" correspondent. Vous devrez peut-être avoir plus de difficulté si cela ne fonctionne pas pour vous.

Si l'application était un processus Windowed, j'utiliserais les éléments suivants pour déterminer ce qui est en cours d'exécution:

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

Ou pour les identifiants de paquet (plus précis)

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

Dites m'en plus sur votre scénario et je vais essayer d'écrire quelque chose de plus exact et avec une interface utilisateur plus flexible.

dotHTM
la source
Dam, je vais regarder tout ce que tu as dit ici une autre fois, mais merci d'avoir traversé tous ces ennuis! Cependant, je n'envisage pas vraiment d'écrire des scripts pour l'instant. :)
cregox
Merci d’avoir ramené ma réponse à une valeur non négative. Je vis en scriptant. Je suis terrible avec BASH, mais j'aime absolument AppleScript et les commandes de terminal qui en découlent.
dotHTM
1

Une autre alternative est Caféine . C'est une application - pas une extension - qui maintient la machine "active" pendant une période déterminée, après quoi la machine peut faire ce qu'elle ferait normalement: passer à blanc, exécuter un économiseur d'écran, dormir, etc. Ne mettez pas votre machine en veille, mais vous la laisserez. Cela semble fonctionnellement équivalent à définir les paramètres d'économie d'énergie sur "jamais" pour la période que vous demandez et de les restaurer par la suite.

enter image description here

JRobert
la source
Mais vous devez toujours démarrer et arrêter l'application. Vous ne pouvez pas le définir et oublier.
Josh K
Je vais tenter le coup la prochaine fois. Merci!
cregox