2 시간마다 Applescript 실행 시작


1

2 시간마다 자동으로 실행하고 싶은 작은 애플 스크립트를 작성했습니다. 따라서 다음과 같은 시작된 데몬을 작성했습니다 (아마도 에이전트 임).

<?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>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.zerowidth.launched.aspect</string>
        <key>Program</key>
        <string>/usr/bin/osascript</string>
        <key>ProgramArguments</key>
        <array>
                <string>osascript</string 
                <string>/Users/***/my_script.scpt</string>
        </array>
        <key>StandardOutPath</key>
        <string>/Users/***/file_log.log</string>
        <key>RunAtLoad</key>
        <true/>
        <key>ThrottleInterval</key>
        <integer>7200</integer>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

그런 다음 터미널을 열고 완료했습니다.

launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist 

잘 작동했지만 두 시간마다 한 번만 작동했습니다. 콘솔을 확인하면 다음과 같은 메시지가 나타납니다.

com.apple.xpc.launchd [1] (com.zerowidth.launched.aspect) :이 서비스는 지속적으로 실행되도록 정의되어 있으며 본질적으로 비효율적입니다.

12 월 16 일 17:02:25 Air-of-myself-2 com.apple.xpc.launchd [1] (com.zerowidth.launched.aspect) : 서비스가 7 초 동안 만 실행되었습니다. 리스폰을 7193 초 밀어냅니다.

무슨 일이 일어나고 있는지 이해하는 데 도움이 될 수 있습니까? 2 시간마다 사과 스크립트를 실행하려면 어떻게해야합니까?

감사.


편집하다. Robert의 조언에 따라 Python 스크립트와 Applescript를 추가합니다.

다음은 Python 스크립트입니다. 콘솔에 LocateMe 명령을 실행하도록 요청하면이 위치에서 내가있는 곳의 위도와 경도를 얻습니다. 그런 다음 API를 호출하여이 장소의 일몰 및 일출 시간을 얻습니다. 마지막으로 작은 함수가 오늘인지 여부를 결정합니다 (sunrise <now

output = os.popen('/Users/***/Desktop/LocateMe').read()
###I extract my coordinates 
coord = output[1:25]
lat = float(coord[1:12]) ###latitude
long = float(coord[13:25]) ### longitude

my_sunrise, my_sunset = get_ris_and_set(lat, long) ##this function calls an API that gives sunset and sunrise time in the position given by (lat,long)
my_sunset1 = my_sunset.time()
my_sunrise1 = my_sunrise.time()

result = str(is_day(now.time(), my_sunrise1, my_sunset1))
### compare the time now and returns true if it is day false otherwise    
with open('/Users/***/Desktop/log_file.txt', 'a') as f:
        print(result, file=f)
sys.exit()

다음은 Applescript입니다. 위의 Python 스크립트를 실행하고 부울 값을 읽습니다 (낮이 아닌 경우). 그런 다음 Mojave의 어두운 모드가 켜져 있는지 확인하고 필요한 경우 전환합니다.

tell application id "com.apple.systemevents"
tell application "Terminal"
    do shell script "/usr/local/bin/python3 /Users/***/Desktop/python.py $@"
end tell

tell appearance preferences
    set value to do shell script "tail -n 1 /Users/***/Desktop/log_file.txt"
    if dark mode is true and value = "True" then
        set dark mode to false
    else if dark mode is false and value = "False" then
        set dark mode to true
    else
        return
    end if
end tell
end tell

다시 실행할 수있는 최종 서비스 명령은 어디에 있습니까?
Ruskes

@Buscar 웃 미안하지만 출시 된 초보자입니다 ... 귀하의 의견을 이해하지 못했습니다. 좀 더 명확하게 말씀해 주시겠습니까? 당신의 친절한 도움에 대단히 감사합니다!
Romeo

launchd2 시간마다 스크립트를 올바르게 실행하고 있습니다. 그러나 스크립트가 지속적으로 실행되는 것으로 보이며 설정된 간격으로 계속 실행되는 스크립트를 실행하는 것은 비효율적입니다. 스크립트는 무엇을해야합니까?
Allan

음, 알겠습니다 답변 주셔서 감사합니다! 내 애플 스크립트는 기본적으로 현재 시간을 확인하고 낮이나 밤인지 여부를 결정하는 파이썬 스크립트 (!)를 실행합니다 (내 위치에 따라 다름). 그런 다음 Mojave Dark-Mode를 켜거나 끕니다. 어떻게하면 더 잘 처리 할 수 ​​있습니까? 어쩌면 Applescript 안에 계속 실행되지 않도록 지침을 설정해야 할 수도 있습니다 ... 감사합니다!
Romeo

Python 스크립트가 실행되고 날짜를 확인하고 필요한 내용을 종료 한 다음 종료되는 것을 가정하면 계속 실행되지 않습니다 (무언가를 기다리는 위치에 오류가없는 한) 또한 KeepAlivetrue로 설정 한 이유는 무엇입니까?
Allan

답변:


2

되지는 StartInterval주기적으로 실행하기위한 키? 귀하의 경우 7200 (초)으로 설정 하시겠습니까?

https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-SW7


환상적인! 내가 원하는대로 작동합니다. 대단히 감사합니다! Btw, StartInterval과 ThrottleInterval의 차이점이 무엇인지 알고 있습니까? 위의 코드를 읽었다면, 그것을 구현하는 더 가벼운 방법이 있다고 생각하십니까? 고마워, 나는 당신의 대답을 받아들이고 현상금을 줄 계획입니다 (그 동안 다른 대답이 나타나지 않으면). 감사! :-D
Romeo

ThrottleInterval은 프로세스 가 얼마나 자주 생성 될 있다고 믿습니다 . 즉, 얼마나 빨리 다시 실행할 수 있습니까? 그러나 실제로 문서화되지 않았으므로 필요하지 않으면 전혀 엉망이되지 않습니다.
제프 닉슨

1

모든 스크립트를 확인해야합니다. [짧은 경우 또는 게시하기 전에. ] plist에서 python 스크립트를 호출 할 수 있습니다. 스크립트에 중복 루프 메커니즘이있을 수 있습니다. 스크립트에 디버그 정보를 넣어야합니다. Applescript 및 phython 스크립트로 파일을 작성하십시오. 애플 스크립트의 do 쉘 스크립트에 "date >> mylogfile # 1"과 같은 것을 넣으십시오. 터미널에서 구문을 확인하십시오.

mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ cat mylogfile#1 
Sun Dec 16 19:32:17 EST 2018
Sun Dec 16 19:32:21 EST 2018
Sun Dec 16 19:32:23 EST 2018

조금 더 도움이 될 수 있습니다. 이 방법으로 스크립트가 호출되는지 알 수 있습니다.

당신은 완전히 applescript에서 이것을 할 수 있습니다. "이제 백그라운드에서 주기적으로이 명령을 계속 실행해야합니다."로 스크롤하십시오.

http://scriptingosx.com/tag/stay-open/

유휴 처리기가 다시 호출 된 후 유휴 루틴이 시간을 어떻게 반환하는지 확인하십시오.

로버트


관심을 가져 주셔서 감사하고 답변이 늦어서 죄송합니다. 좋은 점은 유휴 상태이므로 작동합니다. 그러나 나는 유휴 솔루션을 너무 좋아하지 않습니다. 결국 나는 실행해야하고 항상 바탕 화면의 백그라운드에서 열려있는 응용 프로그램입니다 ... 어쨌든 새로운 것을 배울 수 있도록 시작으로 설정하고 싶습니다. 나는 당신의 조언을 따르고 전체 스크립트를 OP에 넣을 것입니다. 나는 당신이 나를 도울 수 있기를 바랍니다. 대단히 감사합니다.
Romeo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.