Запланированные задачи с какао? - PullRequest
4 голосов
/ 26 ноября 2010

Каков наилучший способ в Какао (и Mac OS X) запланировать запуск программы:

  • когда пользователь входит в систему.
  • в определенное время дня (например: 12:00 полдень).
  • через определенные промежутки времени (например, каждые два часа).

Помимо планирования, программа также должна легко планировать программу и не вызывать ошибок, если пользователь удалит приложение.

По сути, программа представляет собой исполняемый файл командной строки спутника, расположенный рядом с файлом основного приложения в том же пакете .app. Целью программы является обновление некоторых фоновых данных в домашнем каталоге пользователя (в пределах ~/Library/Application Support/MyApp.)

Является ли crontab хорошим кандидатом для этого? На странице man для crontab сказано, что функциональность поглощена до launchctl, но я не могу найти, как запланировать определенное время для запуска утилиты.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 26 ноября 2010

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.

2 голосов
/ 26 ноября 2010

Есть хорошее приложение с графическим интерфейсом под названием Lingon, которое помогает редактировать файлы конфигурации launchd. Вы можете скачать его здесь> Lingon

0 голосов
/ 26 ноября 2010

В Mac OS X вы можете запустить «crontab -e» в Терминале, чтобы запустить редактор crontab (по умолчанию Vi).Когда вы выходите из редактора, работа назначается.

...