我是 launchd 的新手,所以可能我做錯了什麼。我有一個腳本,打算每小時運行一次。為此,我創建了一個包含以下條目的 plist 檔案以實現這一目標:
<key>StartInterval</key>
<integer>3600</integer>
它大約每小時運行一次,但它的表現就像時間間隔是從一個實例的完整時間到下一個實例的開始時間。我這麼說是因為開始時間越來越晚。這是一個清單:
Aug 30 21:00:43 2016 2016083021
Aug 30 22:00:45 2016 2016083022
Aug 30 23:00:49 2016 2016083023
Aug 31 00:00:51 2016 2016083100
Aug 31 01:00:53 2016 2016083101
Aug 31 02:00:54 2016 2016083102
Aug 31 03:00:56 2016 2016083103
Aug 31 04:00:57 2016 2016083104
Aug 31 05:00:58 2016 2016083105
Aug 31 06:01:00 2016 2016083106
Aug 31 07:01:02 2016 2016083107
Aug 31 08:01:06 2016 2016083108
Aug 31 09:01:11 2016 2016083109
Aug 31 10:01:17 2016 2016083110
Aug 31 11:01:22 2016 2016083111
Aug 31 12:01:27 2016 2016083112
Aug 31 13:01:32 2016 2016083113
Aug 31 14:01:38 2016 2016083114
Aug 31 15:01:43 2016 2016083115
Aug 31 16:01:51 2016 2016083116
Aug 31 17:01:56 2016 2016083117
Aug 31 18:02:02 2016 2016083118
這是 launchd 的已知功能嗎?我應該以不同的方式設定開始間隔嗎?
答案1
StartInterval
大約按照指示的秒數重複。StartCalendarInterval
在指定的日曆/時鐘時間重複。
這是我最終使用的:
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Minute</key>
<integer>0</integer>
</dict>
</array>
仍然有一些隨機延遲,但它是在指定的時間之後而不是在經過的時間段之後,所以它不會逐漸變得越來越晚。
Sep 1 21:00:08 2016 2016090121
Sep 1 22:00:04 2016 2016090122
Sep 1 23:00:04 2016 2016090123
Sep 2 00:00:02 2016 2016090200
Sep 2 01:00:06 2016 2016090201
Sep 2 02:00:08 2016 2016090202
Sep 2 03:00:02 2016 2016090203
Sep 2 04:00:06 2016 2016090204
Sep 2 05:00:02 2016 2016090205
Sep 2 06:00:02 2016 2016090206
Sep 2 07:00:07 2016 2016090207
Sep 2 08:00:03 2016 2016090208
Sep 2 09:00:04 2016 2016090209
Sep 2 10:00:09 2016 2016090210
Sep 2 11:00:11 2016 2016090211
Sep 2 12:00:11 2016 2016090212
Sep 2 13:00:08 2016 2016090213
Sep 2 14:00:10 2016 2016090214
Sep 2 15:00:10 2016 2016090215
Sep 2 16:00:11 2016 2016090216
Sep 2 17:00:11 2016 2016090217
Sep 2 18:00:14 2016 2016090218
Sep 2 19:00:09 2016 2016090219
Sep 2 20:00:07 2016 2016090220