Як я можу змусити сценарій запускатися щодня на Mac OS X?


Відповіді:


62

Для довідки, всі 3 варіанти спрацювали б. Однак опція iCal має більше обмежень, ніж інші.

(Є графічні інтерфейси для редагування cron і запуску, як згадується в інших відповідях)

Cron є найпростішим вперед і добре відомим, і є багато навчальних посібників. Нотатки Коулса - це додавання останнього рядка знизу до вашої crontab (шляхом редагування /etc/crontabабо використання crontabв командному рядку):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

У Mac OS X cronйого фактично замінено, launchdале launchdназад сумісний із cronзначенням, який ви все ще можете використовувати, cronале він фактично launchdвиконує всю роботу.

Якщо ви хочете використовувати, launchdви хочете перевірити й інші питання тут, на Super User: (наприклад, як запустити команду запускати як root? ) Щодо того, куди ви хочете зберегти файл конфігурації (файл plist) як коли він працює, залежить від того, в якому каталозі він зберігається і як він завантажений (наприклад, використовували ви судо чи ні) - схоже на cron.

Зразок запуску щоденного запуску плістів (будьте впевнені, що файл і ярлик однакові - мінус пліст для мітки) слід - цей сценарій запускається щодня о 3 хвилині ночі:

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

Варто також зазначити, що завдання запуску, якщо вони були заплановані, коли комп'ютер спить або вимикається, вони запускатимуться, коли комп'ютер знову стане доступним (увімкнивши його або розбудивши його) - хоча лише один раз незалежно від того, скільки днів у нього може бути були. Редагувати: Я щойно був у документі Apple, який сказав, що якщо машина вимкнена, ви втратите будь-які події запуску протягом цього часу (ваш сценарій не запускатиметься при запуску), (увімкнено сценарій запуску після пробудження)


Іншим варіантом є використання " at " (перевірте сторінку керівництва з "man at"). Сценарій може перенести себе, наприклад:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(використовуйте "+ 10 хвилин" замість "завтра", щоб запускати його кожні 10 хвилин; щоб припинити планування, просто зробіть "при -l", щоб перелічити заплановані ідентифікатори завдань, а потім "at -r id ", щоб видалити завдання)

Можливо, вам доведеться спочатку запустити відповідний демон (atrun) (див. Https://superuser.com/a/43680 ):

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Переваги: ​​швидке виправлення, не потрібен доступ до sudo / root, прості у виконанні складні схеми розкладу Недолік: не стандартний метод планування для OS X (який запускається)


8
Сер, для вашого прикладу запущеного файлу конфігурації, я можу поцілувати вас. Але я не хочу.
Пол Д. Уейт

5
launchdце шлях під OS X.
zneak

Так, таке було моє враження. Це здається, що у Тигра були деякі проблеми, але Apple, здається, загострила це з тих пір.
Пол Д. Уейт

У ОС 10.7.4 немає файлу / etc / crontab. ): Отже, я зробив "який crontab", і це дало мені / usr / bin / crontab, але це сфабрикований файл.
Герман Інгяльдссон

@HermannIngjaldsson / usr / bin / crontab - це програма; якщо запустити його у Терміналі crontab -e, він перенесе вас у текстовий редактор на основі терміналу у файлі, який стане вашим особистим кронт-кодом, коли ви збережете його.
Марк Рід

8

LaunchControl - це ще один графічний інтерфейс для запуску / startctl. Хоча альтернативи, згадані іншими, цілком здатні запускати сценарій щодня, за допомогою LaunchControl ви можете налаштувати складні графіки (наприклад, "раз на будній день, у вихідні щогодини між 2:00 та 8:00"). Також це (AFAIK) єдиний інструмент, який фактично підтверджує роботу. Якщо робота не працює, як очікувалося, вона покаже вам, чому.

Безкоштовно намагатись, скільки хочеш.


3
Незважаючи на те, що він може безкоштовно пробувати / використовувати, розробник вважає за краще платити за ліцензію. sites.fastspring.com/somazone/product/shop
Кент

1
Абсолютно. Причиною, чому я опублікував цю відповідь в першу чергу, було підтримка розробника.
Марк Холл

5

CronniX - це гарний інтерфейс для графічного інтерфейсу для планування завдань із застосуванням cron на mac ... Досить пристойний, якщо ви не хочете зайти і поглибитись у документацію про cron.


2
  • Для iCal ви можете прочитати цю статтю .
  • Ви повинні знайти достатньо навчальних посібників для, cronякщо ви перейдете на нього в Google.

Це залежить від того, що ви хочете: сценарії iCal виконуватимуться лише в тому випадку, якщо ви ввійшли в систему, cronвиконує сценарій без входу в систему. Я не знаю, чи iCal виконує скрипт, якщо в той час, коли сценарій повинен був бути перетворений на Mac були страчені. cronробить це.



2

Ось проста, безкоштовна утиліта для генерації XML-файлів:

http://www.gieson.com/Library/projects/utilities/launcha/

За допомогою цього утиліту не потрібно встановлювати програму, просто збережіть результати у папці «Бібліотека / LaunchAgents».


Попередження: якщо ви використовуєте цей інструмент, переконайтеся, що RunAtStartйого встановлено на значення false (якщо ви не хочете, щоб це було правдою). Я витратив годину, з'ясовуючи, чому мій Finder замерзне і зупинить завантаження робочого столу під час завантаження. Відключення RunAtStartне заважає встановленому графіку.
Андреа Лацаротто

1

Я завжди використовую для цього Lingon , але, схоже, це ще не в розвитку. Ви можете спробувати Crontooie , але я ніколи особисто його не використовував. Або просто відредагуйте файл crontab в терміналі.


Мені здається, Лінгон перебуває в активному розвитку ; поточна версія 3 доступна в AppStore разом із попередньою версією 2. Обидві коштують кілька доларів і отримують дуже неоднозначні відгуки. Я особисто використовую Lingon 3 з деяким успіхом, але не рекомендував би його в цілях цієї статті над іншими інструментами, згаданими в інших відповідях (cron, at і т. Д.).
ssc

Востаннє я використовував Lingon більше 2 років тому. У той час це справно працювало для мене, але я не використовував останні версони. Шкода, що він не такий надійний, як колись.
Джош


0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... будь-який командний рядок, який ви введете для ".... вирізати ....", запускається кожні п'ять хвилин.

30 років прогресу, і "cron" - це все ще мій улюблений планувальник.


0

Якщо подія календаря відповідає вашим потребам, вбудований додаток Automator також дозволяє створювати Календарні сигнали, які викликаються подіями календаря. Ви можете використовувати деякі вбудовані дії на основі інтерфейсу користувача, щоб робити те, що вам потрібно, або ви також можете запустити якийсь додаток або користувальницький сценарій AppleScript, JavaScript або оболонки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.