StartCalendarInterval
웹 사이트 데이터를 하루에 한 번 백업 하는 크론과 같은 실행 스크립트 ( )가 있습니다.
<?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>Label</key>
<string>com.example.backup</string>
<key>ProgramArguments</key>
<array>
<string>/Volumes/Example/backup.sh</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</array>
<key>StandardErrorPath</key>
<string>/var/log/com.example/backup_error</string>
<key>StandardOutPath</key>
<string>/var/log/com.example/backup_output</string>
</dict>
</plist>
드물게 인터넷을 사용할 수 없을 때 잘못 될 수 있습니다. 그런 다음 backup.sh 스크립트는 0보다 큰 적절한 오류 코드를 설정합니다.
이제 오류가 발생한 후 1 시간 후에 스크립트가 자동으로 다시 시작되고 싶습니다. 그리고 오류가 없을 때까지 반복해서. 그러나 24 시간 후에는 스크립트의 두 인스턴스가 동시에 실행되는 것을 피할 수 없습니다.
나는 이것이 가능해야한다 생각 ThrottleInterval
하고 SuccessfulExit
. 내 문제는 SuccessfulExit
에 연결되어 있다는 것 입니다 KeepAlive
. 스크립트가 항상 실행되는 것을 원하지 않지만을 통해 하루에 한 번만 실행하십시오 StartCalendarInterval
.
내 작업이 시작된 상태에서 직접 수행 할 수 있습니까? 아니면 단순히 wait 1 hour and try again after error
내 스크립트에 추가해야 합니까? 스크립트는 이와 같이 설정할 때 항상 리소스가 필요합니다. 나는 이것을 피하고 싶다.