Como crio um AppleScript que encerra um aplicativo em um horário específico e coloca o computador em suspensão?

8

Venho brincando com o AppleScript e o Automator para que isso funcione, mas simplesmente não consigo entender. Se alguém pudesse me mostrar um exemplo ou me dar algumas dicas sobre como definir um aplicativo para fechar em um horário específico e colocar o computador no modo de suspensão ou desligamento, isso seria muito apreciado.

Tomás Richardson
fonte
Deseja que isso seja feito regularmente ou é algo que você deseja iniciar manualmente?
ephsmith
Você já escreveu o AppleScript?
ephsmith
É algo que eu gostaria de fazer regularmente e não preciso me preocupar em iniciar. Eu tinha um roteiro escrito, mas era bastante confuso, então eu o joguei no lixo e acabei aqui. Obrigado pela sua resposta. Vou tentar e espero que esclareça os problemas que estou tendo.
Tomás Richardson
se você deseja que isso seja feito regularmente, a programação do trabalho atnão é o que você deseja. cronou launchd. Se você deseja uma interface mais fácil para configurar isso, talvez o lingon 3 ajude.
ephsmith

Respostas:

14

Suponho que você gostaria de iniciar esse procedimento, em vez de executá-lo em um horário agendado regularmente.

Minha abordagem seria iniciar isso na linha de comando, mas qualquer comando pode ser executado em um componente de script shell de um script Automator com algumas modificações. A abordagem a seguir combina alguns componentes para realizar o trabalho:

  1. Um tellcomando para sair do aplicativo
  2. Uma chamada de linha de comando para colocar o computador em suspensão
  3. Uma chamada de linha de comando para agendar 1 e 2 para um horário específico.

1. Dizer ao aplicativo para sair

Isso pode ser tão simples quanto:

osascript -e 'tell application "AppName" to quit'

2. Colocando o computador em suspensão

Dê uma olhada em pmsetmais detalhes, mas emitir o seguinte comando colocará seu computador em suspensão:

pmset sleepnow

3. Planejando uma operação para ser executada em um horário específico

Dê uma olhada no comando at . Este comando permite especificar um horário para a execução de um comando. Você precisará habilitar essa funcionalidade, pois não é por padrão. Para ativar o atrundaemon, execute o seguinte comando [referência no SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Depois de ativar atrun, qualquer comando pode ser agendado para um horário específico, emitindo

echo "<command>" | at HH:MM

que funciona porque atrecebe sua entrada stdinpor padrão. Uma abordagem mais simples é executar comandos listados em um arquivo. Um arquivo pode ser executado usando o -fsinalizador, seguido pelo nome do script a ser executado assim:

at -f /path/to/file HH:MM

Juntando tudo

O que segue assume que atrunestá ativado. Como exemplo de brinquedo, digamos que eu quero sair do Mail e colocar o computador em repouso às 23:00. Eu criaria um arquivo contendo os comandos que desejo executar da seguinte maneira:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Salve esse arquivo quit-and-sleepe, em seguida, execute na linha de comando

at -f /path/to/quit-and-sleep 23:00

Ressalvas

Não fiz nenhuma verificação para garantir que o Mail realmente fosse fechado. O script também pressupõe que nada mais atrapalhará o computador. Eu mantive isso simples aqui como ponto de partida para o que você deseja.

ephsmith
fonte
1

Aqui está uma versão estritamente AppleScript que realiza isso com um valor de tempo codificado. Você poderia, é claro, tornar essa parte interativa, se quiser. Além disso, esta versão assume que o tempo está relacionado aos dias de hoje.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell
Paul Skinner
fonte
1

Você pode agendar um evento uma vez com:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

Ou para agendá-lo para repetir todos os dias, edite o crontab com EDITOR=nano crontab -ee adicione uma entrada como esta:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Lri
fonte
às 23:59 <<< 'osascript -e "encerra o aplicativo \" Mail \ ""; pmset sleepnow 'não funciona para mim. Ele diz: "Jó 1 em Qua Jan 30 12:47:00 2016", mas não executar o comando quando chegar a hora
oluckyman
0

Aqui está o código que aguardará alguns segundos antes de sair do aplicativo atual e entrar em suspensão.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell
imagophereatingapickle
fonte