OSX에서 한 번만 사용하도록 bash 스크립트 예약

OSX에서 한 번만 사용하도록 bash 스크립트 예약

함수로서 파일과 날짜를 입력으로 사용하고 지정된 날짜에 해당 파일을 삭제하는 작은 스크립트를 작성하려고 합니다. 따라서 한 번만 실행하도록 예약하면 됩니다. 그게 전부입니다.

나는 OSX를 사용하고 있으며 살펴 보았습니다.~에at, 그러나 스크립팅하는 데 문제가 있을 뿐만 아니라 OSX에서 와 같은 서비스가 cron더 이상 사용되지 않을 것이라는 것이 내 이해입니다(하루 종일 조사해 왔습니다) launchd.

내가 본 바로는 이 기능이 지나치게 복잡하게 시작되었을 뿐만 아니라 이를 사용하는 방법도 알 수 없는 것 같습니다.특정 시간과 날짜에 일회성 작업 수행(정말로 필요한 전부입니다).

이에 대해 도움을 좀 받고 싶습니다. 차라리 사용하지 않을래~에, 이상적으로는 사용자가 추가 항목을 설치할 필요가 없는 솔루션입니다. 또한 스크립트가 가능해야 합니다(즉, 명령줄). 을 사용해야 한다면 launchd그렇게 해야 하지만 실제로는 특정 시간과 날짜를 사용할 수 있어야 합니다.

답변1

물론 cron과 at은 더 이상 사용되지 않지만 아마도 아무데도 가지 않을 것입니다(그렇다고 하더라도 다시 설치하는 것은 어렵지 않습니다).

launchd를 사용하여 이 작업을 정말로 수행하려면 첫 번째 스크립트에서 속성 목록을 저장하고 로드한 다음 두 번째 스크립트에서 이를 언로드하고 제거해야 합니다.

#!/bin/bash

month=6
day=1
hour=18
minute=0
label=com.superuser.431145
agent=~/Library/LaunchAgents/$label.plist

plist="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version=\"1.0\">
<dict>
<key>Label</key>
<string>$label</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Month</key>
<integer>$month</integer>
<key>Day</key>
<integer>$day</integer>
<key>Hour</key>
<integer>$hour</integer>
<key>Minute</key>
<integer>$minute</integer>
</dict>
</array>
</dict>
</plist>"

echo "$plist" > $agent
launchctl unload $agent 2> /dev/null
launchctl load $agent

두 번째 스크립트는 다음과 같습니다.

plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test

at을 사용한 경우 먼저 를 사용하여 활성화해야 합니다 sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist. 다음은 내 웹사이트에서 복사한 몇 가지 예입니다.

echo 'say test' | at now+5 # +5 and +5 seconds don't work
echo 'say test' | at +1 minute # +1 minutes results in an error
echo 'say test' | at +2 hours
echo say test > test.txt; at -f test.txt now+5
atq # at -l; list at queue
atrm 14 # at -d 14
atrm {1..9999} # remove all jobs

관련 정보