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ê.
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.
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).
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.
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 .
Divulgação: trabalho com a empresa que cria o Power Manager.
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.
Respostas:
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.
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.
Digamos que você queira que a máquina seja desligada às 2h todos os dias, agora entraremos:
Se você deseja que a máquina seja desligada às 2h30 todos os dias, digite:
Agora você deve retornar à linha de comando em que iniciou.
Você Terminou!
fonte
sudo
lá? Eu sei que isso provavelmente fará com que ele desligue, mas eu tenho certeza que você precisa ser root para executarshutdown
.shutdown
é o/sbin
que provavelmente não está no $ PATH padrão do cron. Para corrigir, faça osudo crontab -e
procedimento novamente, digitedd
para excluir a linha (assumindo que o arquivo se parece com o que você vinculou acima) e reinsira a linha como30 22 * * * /sbin/shutdown -h now
.No entanto, pode ser cancelado:
Parar em
yymmddhhmm
:Pare em 4 minutos:
/Library/LaunchAgents/me.lri.forceshutdown.plist
:Se o plist fosse de propriedade de um usuário normal, tentar carregá-lo resultaria no erro
launchctl: Dubious ownership on file (skipping)
:O agente pode ser carregado efetuando logout e logon novamente ou com:
sudo crontab -e
Isso executaria um desligamento não forçado normal:
fonte
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).
fonte
Você pode usar
shutdown
diretamente para agendar um desligamento a qualquer momento no futuro: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.
fonte
# ver nota abaixo
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:
(observe o uso do tempo de 24 horas)
fonte
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:
É muito difícil para um aplicativo ou processo não autorizado bloquear essas etapas.
Por que não
shutdown
O uso
shutdown
forç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 .
Divulgação: trabalho com a empresa que cria o Power Manager.
fonte
Eu daria uma olhada nesta nota técnica da Apple
fonte