Comment empêcher le sommeil de Mac depuis la ligne de commande?


12

J'ai un long script en cours d'exécution sur l'ordinateur distant.

Je ne veux pas terminer ma session ssh, et je dois l'entrer dans un script shell.

Comment empêcher mon Mac de s'endormir depuis la ligne de commande?


3
Quelle version OS X?
nohillside

Réponses:


19

Dans Mountain Lion, vous pouvez utiliser la caffeinatecommande.

caffeinate -u -t 1000

empêchera le sommeil inactif pendant 1000 secondes.


1
Je n'ai pas encore réussi avec une combinaison de ligne de commande 'cafféinate' (y compris une ci-dessus) ni Caffeine.app dans Mavericks empêchant le sommeil à la fermeture du couvercle. InsomniaX.app est la seule chose qui a jusqu'à présent empêché le sommeil du couvercle, mais n'a pas encore trouvé de version cmdline fonctionnelle (n'a pas encore fait fonctionner goo.gl/CU06jb - elle peut être obsolète). Même encore, je veux quelque chose qui permette d'exiger un mot de passe d'affichage même en refusant le sommeil pendant une durée limitée et programmable à la fermeture du couvercle ... et InsomniaX.app ne semble pas le faire non plus.
Johnny Utahh

1
Problèmes similaires. Je suis sur Yosemite, et même si je lance de la caféine dans le terminal, après un certain temps, l'écran s'assombrit et je dois me reconnecter. Cela me suggère que la caféine ne maintient pas le Mac éveillé, ce qui est mon objectif afin que la connexion Wifi peut persister / tout ce que j'ai en cours peut continuer.
dmonopoly

12

La solution à ce problème n'est pas de garder le client (votre Mac) éveillé. L'utilisation d'approches comme celle-ci n'est pas fiable. Que se passe-t-il si la connexion réseau est perdue? Même si votre Mac est réveillé, le script s'arrêtera.

Utilisation nohup

Si votre script de longue durée est appelé eternity.sh, essayez ce qui suit:

nohup /path/to/eternity.sh > /path/to/output.out &

Vous pouvez maintenant même fermer la connexion et votre script continuera de fonctionner . Met en &arrière plan le processus afin que vous puissiez garder la connexion ouverte et entrer des commandes. Affichez toute sortie de votre script via:

tail -f /path/to/output.out

Les chemins dans les exemples sont facultatifs si le script se trouve sur votre chemin et que vous souhaitez que la sortie du script soit écrite output.outdans le répertoire courant.

Je gère des scripts qui s'exécutent pendant des jours à la fois. Des scripts comme ceux-ci doivent être détachés du terminal. Heureusement, nohupfournit une invocation de commande facile à retenir pour y parvenir - pensez à ne pas raccrocher .


5
Voir aussi man screen.

@mankoff - j'utilise déjà l'écran. C'est la meilleure commande depuis la découverte d'une race tranchée. ;) Le point principal de la question est d'éliminer le besoin du "ssh to @ quelque part" lorsque mon mac s'endort - je ne veux tout simplement pas terminer ma session ssh - ma commande du côté distant est déjà "protégée" avec écran . ;)
kobame

@ephsmith - la question était: comment éliminer la fin de la session ssh ... ofc nohup est bien pour les situations où votre commande à distance n'est pas interactive. Pour les commandes interactives, l'écran est une bien meilleure solution. Merci quand même pour réponse.
kobame

1
@kobame, peut-être le point de la question et ces informations supplémentaires auraient dû être incluses dans votre question d'origine. La première ligne de votre question faisait référence à un script de longue durée. J'ai supposé que ce n'était pas interactif, ce qui a conduit à la référence à nohup.
ephsmith

@kobame, l'une de ces réponses a-t-elle résolu votre problème?
ephsmith

8

Pmset est une autre option . Utilisez la commande pmset noidle pour empêcher le sommeil tant qu'il pmsetest en cours d'exécution. Malheureusement, cela nécessite une fenêtre de terminal distincte avec pmsetexécution en elle. Cependant, l'autre option caffeinate,, vous permet uniquement de définir une certaine heure . Il s'agit donc de choisir si vous souhaitez ouvrir une deuxième session SSH ou faire face à une contrainte de temps.

Edit: Selon le commentaire de binarybob , vous pouvez réellement l'exécuter en arrière-plan comme ceci: pmset noidle &Pour revenir au pmsettype fg.


Vous pouvez également exécuter pmseten arrière-plan à l'aide pmset noidle &et donc continuer à utiliser l'invite de commandes actuelle. Tapez fgpour pmsetrevenir, à quel moment vous pouvez Ctrl + C
binarybob

@binarybob Oh! Je ne le savais pas. Merci pour le conseil!
daviesgeek

@davisgeek - vraiment sympa! Merci pour la pointe.
kobame

1
celui-ci fonctionne également dans le bloc-notes IPython: !pmset noidle- très agréable lorsque vous avez un ordinateur de bureau servant un bloc-notes IPython et un ordinateur portable se connectant à distance.
Jason S

1
Ça ne marche pas pour moi. Il s'exécute avec succès, le message "Prévention du sommeil inactif (^ C pour quitter) ..." s'affiche, mais il se met toujours en veille.
Iulian Onofrei

6
caffeinate -i -s /bin/ssh ...

Explication:

-i - Empêche le sommeil inactif.

-s- Empêchez le système de dormir (entièrement, même si vous fermez le couvercle). Remarque: il ne fonctionne que sur secteur.

/bin/ssh- Continuez simplement à écrire la commande que vous souhaitez exécuter. Utiliser sshdirectement au lieu de /bin/sshdevrait également fonctionner.

Résultats: votre système ne dormira pas tant que la sshcommande sera en cours d'exécution.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.