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
launchd
2 시간마다 스크립트를 올바르게 실행하고 있습니다. 그러나 스크립트가 지속적으로 실행되는 것으로 보이며 설정된 간격으로 계속 실행되는 스크립트를 실행하는 것은 비효율적입니다. 스크립트는 무엇을해야합니까?
KeepAlive
true로 설정 한 이유는 무엇입니까?