launchd
- правильный способ сделать это (crontab
устарела на Mac в пользу launchd
).Вы должны создать plist-файл с информацией о вашей программе (имя исполняемого файла, аргументы и т. Д.), И часть его будет (предупреждение, набранное в браузере и непроверенное):
<key>StartCalendarInterval</key>
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
<key>StartInterval</key>
<integer>7200</integer>
<key>LimitLoadToSessionType</key>
<string>Aqua</string>
<key>RunAtLoad</key>
<true/>
StartCalendarInterval
должен запускать вашу программу в начале 12-го часа (поэтому полдень). StartInterval
должен запускать вашу программу каждые 2 часа (= 7200 секунд) - The
LimitLoadToSessionType
загружает вашу программу только тогда, когда начинается сеанс Aqua (пользователь фактически входит в систему на оконном сервере (поэтому это предотвратит загрузку, если пользователь ssh
находится внутри) RunAtLoad
сообщает исполняемому файлузапускаться при загрузке plist. Это, в сочетании с LimitLoadToSessionType
, должно запускать исполняемый файл при входе пользователя в систему.
Возможно, StartInterval
и StartCalendarInterval
являются взаимоисключающими.В этом случае вы можете вынуть ключ StartInterval
и изменить значение StartCalendarInterval
на:
<key>StartCalendarInterval</key>
<array>
<dictionary>
<key>Hour</key>
<integer>0</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>2</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>4</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>6</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>22</integer>
</dictionary>
</array>
Для получения дополнительной информации см. man launchd.plist
.