특정 시간에 응용 프로그램을 종료 한 다음 컴퓨터를 잠자기 상태로 만드는 AppleScript를 어떻게 만듭니 까?


8

나는이 일을하기 위해 AppleScript와 Automator와 함께 놀았지만 머리를 감쌀 수는 없습니다. 누군가 나에게 예를 보여 주거나 특정 시간에 응용 프로그램을 닫고 컴퓨터를 절전 모드 또는 종료 상태로 만드는 방법에 대한 팁을 줄 수 있다면 크게 감사하겠습니다.


이 작업을 정기적으로 수행 하시겠습니까, 아니면 수동으로 시작 하시겠습니까?
ephsmith

이미 AppleScript를 작성 했습니까?
ephsmith

정기적으로하고 싶은 일이며 시작에 대해 걱정할 필요가 없습니다. 스크립트를 작성했지만 상당히 지저분해서 휴지통에 버리고 여기에 끝났습니다. 답변 주셔서 감사합니다. 이 작업을 진행하고 내가 겪고있는 문제를 해결하기를 바랍니다.
Tomás Richardson

이 작업을 정기적으로 수행하려면 작업 예약 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. 특정 시간에 실행될 조작 스케줄링

at 명령을 살펴보십시오 . 이 명령은 명령 실행 시간을 지정하는 기능을 제공합니다. 이 기능은 기본적으로 사용되지 않으므로 사용하도록 설정해야합니다. 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은 활성화 된 것으로 가정합니다 . 장난감의 예로 메일을 종료하고 오후 11시에 컴퓨터를 절전 모드로 전환하려고한다고 가정하겠습니다. 다음과 같이 실행하려는 명령이 포함 된 파일을 만듭니다.

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

해당 파일을 저장 quit-and-sleep한 후 명령 행에서 실행하십시오.

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

경고

Mail이 실제로 닫혔는지 확인하지 않았습니다. 이 스크립트는 또한 컴퓨터를 절전 모드로 전환하는 데 방해가되지 않는다고 가정합니다. 나는 당신이 원하는 것에 대한 시작점으로 여기에서 간단하게 유지했습니다.


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

23:59에서 <<< 'osascript -e "quit app \"Mail \ ""; pmset sleepnow '가 작동하지 않습니다. "작업 1 2016 년 4 월 30 일 12:47:00에 작업 1"이라고 말하지만 시간이 오면 명령을 실행하지 않습니다
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.