Как создать AppleScript, который будет выходить из приложения в определенное время, а затем переводить компьютер в спящий режим?

8

Я возился с AppleScript и Automator, чтобы заставить эту штуку работать, но я просто не могу обернуться. Если бы кто-нибудь мог показать мне пример или дать несколько советов о том, как настроить приложение на закрытие в определенное время, а затем перевести компьютер в спящий режим или выключить его, это было бы очень полезно.

Томас Ричардсон
источник
Вы хотите, чтобы это делалось регулярно, или вы хотите инициировать это вручную?
Эфсмит
У вас уже написан AppleScript?
Эфсмит
Это то, что я хотел бы делать регулярно и не беспокоиться о начале. У меня действительно был написан сценарий, но он был довольно грязным, поэтому я его разгромил и оказался здесь. Спасибо за Ваш ответ. Я попробую, и, надеюсь, это прояснит проблемы, с которыми я столкнулся.
Томас Ричардсон
если вы хотите, чтобы это делалось регулярно, тогда планирование работы atне то, что вам нужно. cronили launchd. Если вам нужен более простой интерфейс для настройки, возможно, Lingon 3 поможет.
Ephsmith

Ответы:

14

Я предполагаю, что вы хотели бы начать эту процедуру, а не запускать ее в запланированное время.

Мой подход состоял бы в том, чтобы инициировать это из командной строки, но любые команды могут быть выполнены в компоненте сценария оболочки сценария Automator с некоторыми изменениями. Следующий подход объединяет несколько компонентов для выполнения работы:

  1. tellКоманда , чтобы выйти из приложения
  2. Вызов из командной строки, чтобы перевести компьютер в спящий режим
  3. Вызов из командной строки для расписания 1 и 2 на определенное время.

1. Сообщаем, чтобы приложение вышло

Это может быть так просто, как:

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

2. Перевод компьютера в спящий режим

Ознакомьтесь с pmsetболее подробной информацией, но, введя следующую команду, вы переведете компьютер в спящий режим:

pmset sleepnow

3. Планирование операции для запуска в определенное время

Посмотрите на команду. Эта команда дает вам возможность указать время выполнения команды. Вам нужно будет включить эту функцию, так как она не включена по умолчанию. Чтобы включить atrunдемон, выполните следующую команду [ссылка на SU] :

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

После включения atrunлюбую команду можно запланировать на определенное время, выполнив

echo "<command>" | at HH:MM

который работает, потому что atпринимает его вход stdinпо умолчанию. Более простой подход - запуск команд, перечисленных в файле. Файл может быть выполнен с использованием -fфлага, за которым следует имя сценария, который будет выполняться следующим образом:

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

Собираем все вместе

Далее следует, что atrunэто включено. В качестве примера, скажем, я хочу выйти из Mail и перевести компьютер в режим сна в 11 вечера. Я хотел бы создать файл, содержащий команды, которые я хочу выполнить следующим образом:

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

Сохраните этот файл quit-and-sleepи затем запустите в командной строке

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

Предостережения

Я не проверял, чтобы Почта действительно закрылась. Сценарий также предполагает, что ничто другое не помешает перевести компьютер в спящий режим. Я сохранил это просто здесь как отправную точку для того, что вы хотите.

ephsmith
источник
1

Вот строго яблочная версия, которая выполняет это, учитывая жестко запрограммированное значение времени. Конечно, вы можете сделать эту часть интерактивной, если хотите. Кроме того, эта версия предполагает, что временная строка относится к сегодняшнему дню.

--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
Пол Скиннер
источник
1

Вы можете запланировать событие один раз с:

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

Или, чтобы запланировать его повторение каждый день, отредактируйте crontab EDITOR=nano crontab -eи добавьте следующую запись:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
LRI
источник
в 23:59 <<< 'osascript -e "выйти из приложения \" Почта \ ""; pmset sleepnow 'не работает для меня. Там написано «работа 1 в субботу 30 апреля 12:47:00 2016», но не запускает команду, когда придет время
oluckyman
0

Вот код, который будет ждать несколько секунд, прежде чем выйти из текущего приложения и перейти в спящий режим.

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
источник