Como posso desligar meu Mac à força em um horário determinado?

19

Estou procurando um aplicativo de desligamento automático que desligue o computador com força no horário marcado.

A parte mais importante disso é que o desligamento não deve ser cancelável (a menos que o processo seja extremamente oneroso).

atormentar
fonte
O que você quer dizer com "aplicativo"? Ele precisa ser um programa GUI ou o launchd (que eu sugiro abaixo) é aceitável? Se você faz o que é um aplicativo GUI, o que você quer fazer? Solicitar o tempo que o computador deve ser desligado, quando executado?
TJ Luoma

Respostas:

25

Ok, então, além da minha resposta anterior, posso orientá-lo a fazer com que o cron (um serviço de agendamento do UNIX embutido) execute um comando de desligamento agendado para você.

Ele será executado como root e será forçado.

  • Abrir terminal (/ Aplicativos / Utilitários / Terminal)
  • Entrada sudo crontab -e

Você precisará digitar sua senha de login e pressionar enter.

Agora você estará em um editor de texto (vim). Insira cuidadosamente as seguintes teclas.

  • Pressione iuma vez (isso permitirá que você insira texto)

Digamos que você queira que a máquina seja desligada às 2h todos os dias, agora entraremos:

* 2 * * * /sbin/shutdown -h now

Se você deseja que a máquina seja desligada às 2h30 todos os dias, digite:

30 2 * * * /sbin/shutdown -h now
  • Quando você digitar isso, pressione esc
  • Em seguida, pressione shift+ z shift+ z(que é "z" em maiúsculas duas vezes, para gravar as alterações e sair do editor)

Agora você deve retornar à linha de comando em que iniciou.

Você Terminou!

macaco
fonte
Você não precisa colocar sudolá? Eu sei que isso provavelmente fará com que ele desligue, mas eu tenho certeza que você precisa ser root para executar shutdown.
Daviesgeek 17/09
Sem exceções, é uma resposta incrível, muito feliz surpresa, especialmente depois que eu respondi a sua pergunta rudemente. Muito obrigado por sua ajuda
Harry
3
@daveisgeek - Você está totalmente certo, mas observe que iniciamos o crontab com o sudo. Isso significa que estamos editando o crontab do root e, portanto, quaisquer comandos agendados serão executados como esse usuário.
macaco
Ei, eu fiz isso e, na hora marcada, recebi uma caixa de diálogo dizendo: este computador será desligado em 10 minutos? E isso me pede para cancelar. Não sei se isso foi resultado da coisa do cron ou da economia de energia que eu também fiz. A coisa cron deve forçar um desligamento sem uma caixa de diálogo de cancelamento?
Harry
3
shutdowné o /sbinque provavelmente não está no $ PATH padrão do cron. Para corrigir, faça o sudo crontab -eprocedimento novamente, digite ddpara excluir a linha (assumindo que o arquivo se parece com o que você vinculou acima) e reinsira a linha como 30 22 * * * /sbin/shutdown -h now.
nohillside
13

No entanto, pode ser cancelado:


Parar em yymmddhhmm:

shutdown -h 1109211555

Pare em 4 minutos:

shutdown -h +4

/Library/LaunchAgents/me.lri.forceshutdown.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>me.lri.forceshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>shutdown</string>
        <string>-h</string>
        <string>now</string>

    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

Se o plist fosse de propriedade de um usuário normal, tentar carregá-lo resultaria no erro launchctl: Dubious ownership on file (skipping):

sudo chown root /Library/LaunchAgents/me.lri.forceshutdown.plist

O agente pode ser carregado efetuando logout e logon novamente ou com:

sudo launchctl load /Library/LaunchAgents/me.lri.forceshutdown.plist

sudo crontab -e

`08 16 * * * /sbin/shutdown -h now`

Isso executaria um desligamento não forçado normal:

osascript -e 'tell app "System Events" to shut down'
Lri
fonte
Ao adicionar o comando shutdown a um agente launchd em / Library / LaunchAgents /, ele não funcionou e o 'console' registraria 'shutdown: NOT super-user'. Talvez isso funcionasse em / System / Library / LaunchAgents (mas você não deveria colocar coisas lá :-)) Eu só precisava de um desligamento normal, então fui com o osascript e coloquei em ~ / Library / LaunchAgents /bla.shutdown.plist. Funcionou bem.
commonpike
Eu tive que usar <code> osascript -e 'tell app "Finder" para desligar' </code> embora
commonpike 28/01/12
Esta é a única resposta correta. (na minha opinião)
CousinCocaine 13/09
9

Isso pode ser agendado em Preferências do sistema> Economia de energia> Agenda . Não tenho certeza de que isso iniciará um desligamento forçado, você precisará experimentá-lo. Mas essa é uma opção integrada para automatizar o desligamento / ativação programado.

  • Você também pode desligar o sistema à força com um comando terminal (requer root):

    shutdown -h now

    Você pode colocar esse comando em uma tarefa agendada launchd ou cron . Confira este artigo para obter mais informações sobre esses dois serviços.

  • Você também pode verificar um aplicativo como o apropriadamente chamado iWannaSleep (não tenho certeza se isso força o desligamento).

macaco
fonte
O que...??? Estou procurando um aplicativo.
Harry
2
Você pode parecer menos ingrato, mas se reler minha resposta, verá que recomendo um aplicativo e, se fizer uma pequena pesquisa independente, verá que existem mais alguns aplicativos com essa capacidade!
macaco
O iWannaSleep é o primeiro resultado que as pessoas recomendam no google e não faz o que eu quero. E você está me recomendando aprender alguma coisa unix para desligar o computador?
Harry
3
Eu o recomendo porque é uma maneira eficaz de alcançar o que você deseja usando ferramentas internas. Se você não conseguir encontrar um aplicativo que atenda às suas necessidades, talvez seja necessário procurar algo ao longo das linhas da minha sugestão.
macaco
1
Economia de energia »A programação não é uma boa resposta, porque solicitará ao usuário 10 minutos antes do desligamento e oferecerá o cancelamento do processo.
TJ Luoma
3

Você pode usar shutdowndiretamente para agendar um desligamento a qualquer momento no futuro:

shutdown -h time

onde a hora especifica uma hora futura em um dos dois formatos: + number ou yymmddhhmm, em que o ano, mês e dia podem ter como padrão os valores atuais do sistema. O primeiro formulário reduz o sistema em número de minutos e o segundo no tempo absoluto especificado.

nohillside
fonte
2
cd ~/Downloads/

curl --remote-name http://dl.dropbox.com/u/18414/ase/com.tjluoma.forceshutdown.plist

# ver nota abaixo

sudo mv com.tjluoma.forceshutdown.plist /Library/LaunchAgents

sudo chown root:wheel /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

sudo launchctl load /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

Nota:

Conforme escrito, o plist fará com que o computador seja desligado às 23h (horário local) todos os dias.

Se você quiser alterar a hora, edite o script em qualquer editor de texto. Altere as teclas Hora e Minuto, extraídas aqui:

<dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>0</integer>
</dict>

(observe o uso do tempo de 24 horas)

TJ Luoma
fonte
2

Desligamento programado mais agradável

Se você deseja desligar o Mac com segurança em um horário programado, considere o Power Manager ; ele é desligado sem deixar que os aplicativos bloqueiem o processo:

  • Todos os usuários ativos recebem ampla notificação.
  • Um aviso grande é exibido logo antes do desligamento começar.
  • Solicita-se que os aplicativos em execução sejam encerrados.
  • Os aplicativos que ignoram a solicitação legal são encerrados com mais firmeza.
  • O logout é deixado para concluir antes que o Mac seja finalmente desligado.

É muito difícil para um aplicativo ou processo não autorizado bloquear essas etapas.

Por que não shutdown

O uso shutdownforçará o encerramento de todos os processos no seu Mac, incluindo aplicativos gráficos. Para muitos aplicativos, esse é um comportamento agressivo e não oferece ao aplicativo muitas oportunidades para salvar estado ou dados.

Assistente de programação

O Power Manager inclui uma tarefa do Assistente de Agendamento para desligar um agendamento .

Power Manager - tarefa diária de desligamento

Divulgação: trabalho com a empresa que cria o Power Manager.

Graham Miln
fonte
0

Eu daria uma olhada nesta nota técnica da Apple

Samantha Catania
fonte
Obrigado, o que eu faço agora?
Harry
você pode usar o SendAppleEventToSystemProcess (kAEShutDown) e, em seguida, usar o comando killall -u username para matar todos os aplicativos (já que você não o deseja cancelável). Você também pode conferir a classe do timer: developer.apple.com/library/ mac / # documentation / Cocoa / Reference /…
Samantha Catania
1
Ótimo artigo, mas o OP estava hesitando em usar o cron ou o launchd, duvido que ele esteja procurando codificar sua própria solução para esse problema.
macaco
1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Daviesgeek