Como impedir que o Mac durma na linha de comando?


12

Eu tenho um script de longa duração no computador remoto.

Não quero encerrar minha sessão ssh e preciso inseri-la em um script de shell.

Como é possível impedir que meu Mac caia no sono na linha de comando?


3
Qual versão do OS X?
nohillside

Respostas:


19

No leão da montanha, você pode usar o caffeinatecomando

caffeinate -u -t 1000

evitará inatividade por 1000 segundos.


1
Ainda não obtive sucesso com nenhuma combinação de cmdline 'cafeína' (incluindo uma acima) nem Caffeine.app no ​​Mavericks, impedindo o sono após o fechamento da tampa. O InsomniaX.app é a única coisa que até agora impediu o sono da tampa, mas ainda não encontrou uma versão cmdline funcional (ainda não fez o goo.gl/CU06jb funcionar - pode ser obsoleto). Mesmo assim, eu quero algo que ative os requisitos de senha de exibição, mesmo negando o sono por tempo limitado e programável após o fechamento da tampa ... e o InsomniaX.app também não parece fazer isso.
Johnny Utahh 11/02

1
Questões semelhantes. Estou em Yosemite e, apesar de rodar cafeína no terminal, depois de um tempo a tela fica escura e preciso fazer login novamente. Isso sugere que o cafeína não está mantendo o Mac acordado, que é meu objetivo para que a conexão Wi-Fi pode persistir / o que quer que eu esteja acontecendo pode continuar.
dmonopoly

12

A solução para esse problema não é manter o cliente (seu Mac) acordado. Usar abordagens como essa não é confiável. O que acontece se a conexão de rede for perdida? Mesmo se o seu Mac estiver ativado, o script será interrompido.

Usar nohup

Se o seu script de execução longa for chamado eternity.sh, tente o seguinte:

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

Agora você pode até fechar a conexão e seu script continuará sendo executado . Os &planos de fundo são o processo para que você possa manter a conexão aberta e inserir comandos. Veja qualquer saída do seu script via:

tail -f /path/to/output.out

Os caminhos nos exemplos são opcionais se o script estiver no seu caminho e você desejar que a saída do script seja gravada output.outno diretório atual.

Eu gerencio scripts que são executados por dias seguidos. Scripts como esses devem ser desanexados do terminal. Felizmente, nohupfornece uma chamada de comando fácil de lembrar para conseguir isso - acho que não há problema .


5
Veja também man screen.

@ mankoff - eu já estou usando a tela. É o melhor comando desde a descoberta de uma raça fatiada. ;) O ponto principal da questão é eliminar a necessidade do "ssh to @ algures" quando meu mac adormecer - eu simplesmente não quero terminar minha sessão ssh - meu comando no lado remoto já está "protegido" com a tela . ;)
kobame

@ephsmith - a pergunta era: como eliminar a sessão ssh encerrada ... ofc nohup é bom para situações em que seu comando remoto não é interativo. Para os comandos interativos, a tela é uma solução muito melhor. Thanx de qualquer maneira pela resposta.
kobame 3/09/12

1
@ kobame, talvez o ponto da pergunta e essas informações adicionais devam ter sido incluídas na sua pergunta original. A primeira linha da sua pergunta se refere a um script de execução longa. Eu assumi que não era interativo, o que levou à referência ao nohup.
ephsmith

@kobame, alguma dessas respostas resolveu seu problema?
ephsmith

8

Outra opção é pmset . Use o comando pmset noidle para impedir o sono enquanto pmsetestiver em execução. Infelizmente, requer uma janela de terminal separada para pmsetexecução. No entanto, a outra opção caffeinate,, apenas permite definir um determinado horário . Portanto, é uma questão de escolher se você deseja abrir uma segunda sessão SSH ou lidar com uma restrição de tempo.

Edit: De acordo com o comentário do binarybob , você pode executá-lo em segundo plano assim: pmset noidle &Para voltar ao pmsettipo fg.


Você também pode executar pmsetem segundo plano usando pmset noidle &e, portanto, continuar usando o prompt de comando atual. Digite fgpara obter pmsetde volta, em que ponto você pode Ctrl + C-lo
binarybob

@binarybob Oh! Eu não sabia disso. Obrigado pela dica!
precisa saber é o seguinte

@davisgeek - muito bom! Thanx pela dica.
kobame

1
este também funciona no notebook IPython: !pmset noidle- muito bom quando você tem um desktop servindo o notebook IPython e um laptop conectado remotamente.
Jason S

1
Isso não funciona para mim. É executado com êxito, a mensagem "Impedindo o sono inativo (^ C para sair) ..." é exibida, mas ainda permanece no modo de espera.
Iulian Onofrei

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

Explicação:

-i - Impeça o sono ocioso.

-s- Impedir o sono do sistema (totalmente, mesmo se você fechar a tampa). Nota: ele funciona apenas com energia CA.

/bin/ssh- Continue escrevendo o comando que deseja executar. Usar sshdiretamente em vez de /bin/sshtambém deve funcionar.

Resultados: Seu sistema não irá dormir enquanto o sshcomando estiver em execução.



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.