Як мені запустити сценарій кожні, скажімо, 30 хвилин? Я припускаю, що існують різні способи для різних ОС. Я використовую OS X.
Як мені запустити сценарій кожні, скажімо, 30 хвилин? Я припускаю, що існують різні способи для різних ОС. Я використовую OS X.
Відповіді:
Просто використовуйте launchd . Це дуже потужна система запуску, а тим часом це стандартна система запуску для Mac OS X (поточна версія OS X навіть не завантажилася б без неї). Для тих , хто не знайомий з launchd
(або з OS X в цілому), це як помісь між init
, cron
, at
, SysVinit ( init.d
), inetd
, upstart
і systemd
. Позичаючи концепції всіх цих проектів, а також пропонуючи речі, яких ви не можете знайти в інших місцях.
Кожна послуга / завдання - це файл. Розташування файлу залежить від питань: "Коли ця служба повинна працювати?" та "Які привілеї знадобляться службі?"
Перейти до системних завдань
/Library/LaunchDaemons/
якщо вони будуть працювати, незалежно від того, ввійшов який-небудь користувач в систему чи ні. Вони будуть розпочаті з привілеями "root".
Якщо вони запускатимуться лише якщо будь-який користувач увійшов до системи, вони перейдуть до
/Library/LaunchAgents/
і буде виконано з привілеями користувача, який щойно ввійшов у систему.
Якщо вони працюватимуть, лише якщо ви ввійшли в систему, вони перейдуть до
~/Library/LaunchAgents/
де ~ - це ваш ДОМАШНИЙ каталог. Це завдання буде виконуватися з вашими привілеями, подібно до того, якби ви запускали їх самостійно за допомогою командного рядка або подвійним клацанням файлу у Finder.
Зверніть увагу , що існує також /System/Library/LaunchDaemons
і /System/Library/LaunchAgents
, але , як завжди, все під /System
управляється OS X. Ви не повинні розміщувати будь-які файли там, ви повинні не змінювати будь-які файли там, якщо ви дійсно не знаєте , що ви робите. Блудування в папці "Системи" може зробити вашу систему непридатною для використання (переведіть її в стан, де вона навіть відмовиться завантажуватися знову). Це каталоги, де Apple розміщує launchd
завдання, які запускають та запускають вашу систему під час завантаження, автоматично запускають служби за необхідності, виконують завдання з обслуговування системи тощо.
Кожне launchd
завдання містить файл у форматі plist. Він повинен мати зворотне позначення доменного імені. Наприклад, ви можете назвати своє завдання
com.example.my-fancy-task.plist
Цей список може мати різні опції та налаштування. Писати по одній руці неоптимально, можливо, ви захочете отримати безкоштовний інструмент Lingon для створення своїх завдань. Раніше цей інструмент був безкоштовним, зараз він коштує 5 доларів у магазині додатків і 10 доларів як версія, яка не є додатком (версія, яка не є додатком, набагато потужніша, і якщо ви вже плануєте за нього платити, серйозно, придбайте магазин, який не є додатком) версія). Якщо хтось знає подібний інструмент, який є безкоштовним або відкритим кодом, напишіть мені рядок у коментарях, і я скоріше рекомендую такий (не хочу рекламувати тут для комерційного програмного забезпечення).
Як приклад, це може виглядати так
<?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>com.example.my-fancy-task</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/my-script.sh</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Цей агент запускатиме скрипт оболонки /usr/local/bin/my-script.sh кожні 1800 секунд (кожні 30 хвилин). Ви також можете запустити завдання на певні дати / час (в основному launchd може зробити все, що може зробити cron), або ви навіть можете відключити "OnDemand", викликаючи launchd, щоб тримати процес постійно запущеним (якщо він закривається або аварійно завершує роботу, launchd негайно перезапустить його) . Ви навіть можете обмежити, скільки ресурсів може використовувати процес (як вже було сказано раніше, Lingon показує всі ці налаштування в приємному інтерфейсі інтерфейсу).
Оновлення: хоча OnDemand
воно все ще підтримується, воно застаріло. Новий параметр названий KeepAlive
, що має набагато більше сенсу. Він може мати логічне значення, і в цьому випадку це прямо протилежне OnDemand
(встановлення його false
поведінки, як ніби OnDemand
, true
і навпаки). Чудова нова особливість полягає в тому, що він також може мати значення словника замість булевого. Якщо він має значення словника, у вас є кілька додаткових опцій, які дають вам більше тонкого контролю зерна, за яких обставин завдання буде збережене. Наприклад, він залишається в живих лише до тих пір, поки програма завершується нульовим кодом виходу, лише поки існує певний файл / каталог на диску, лише якщо інше завдання також живе, або лише якщо мережа наразі працює.
Також ви можете вручну вмикати / вимикати завдання за допомогою командного рядка:
launchctl <command> <parameter>
Команда може бути завантажити або розвантажити, щоб завантажити plist або вивантажити його знову, і в цьому випадку параметром є шлях до файлу. Або командою може бути start або stop, щоб просто запустити або зупинити таке завдання, у цьому випадку параметром є мітка (com.example.my-fancy-task). Існують також інші команди та параметри.
Див. Документацію Apple щодо формату plist та launchctl
інструменту командного рядка (зверніть увагу, що ви можете вибрати версію OS X зверху, оскільки формат / параметри різняться залежно від різних версій OS X)
StartCalendarInterval
з масивом із двох словників, як із ключем, так Minute
і зі значенням раз 00
і раз 30
, зробить саме те, що ви просили. Будь ласка, задавайте питання надалі як запитання, а не як коментарі, тоді я також можу показати вам остаточний словник (я не можу це зробити в коментарі). Цей сайт - це все про те, щоб задавати питання. Якщо ви хочете натякнути комусь на питання, опублікуйте посилання на запитання як коментар, але не саме питання.
Ви можете скористатися дуже зручним генератором plist: http://launched.zerowidth.com/ (не потрібно нічого купувати ...)
це дасть вам оболонку з одним вкладишем, щоб зареєструвати нове заплановане завдання з уже рекомендованим launchd
У MacOSX у вас є принаймні такі параметри:
З особистого досвіду, cron є найнадійнішим. Коли я тестував, у launchd було кілька помилок та химерностей. Сигнали iCal спрацьовують лише тоді, коли ви ввійшли в систему (але це, можливо, вам подобається).
Як зазначив Мецкі, шлях до цього можна було б здійснити launchd. Існує інтерфейс графічного інтерфейсу для launchd під назвою Lingon, який ви можете перевірити, на відміну від редагування файлів launchd вручну:
Lingon - графічний користувальницький інтерфейс для створення редагування файлів конфігурації launchd для Mac OS X Leopard 10.5.
[знімок ...]
Редагувати файл конфігурації простіше, ніж будь-коли в цій версії, і він має два різних режими. Основний режим, який має найпоширеніші налаштування, доступні в дуже простому інтерфейсі та Експертний режим, де ви можете додати всі налаштування або безпосередньо в текст, або вставити їх через меню.
MAC OS має інструмент автоматизації, який є таким же, як у Планувальника завдань у вікнах. А за допомогою Automator ви можете щоденно планувати завдання та пов'язувати завдання з періодичною подією календаря, щоб запускати сценарії щодня в заданий час. посилання для запуску сценаріїв щодня в Mac OS
Для сценаріїв яблук я встановлюю спеціальний календар iCal і використовую будильники для їх періодичного запуску. Для інструментів командного рядка я використовую launchd.
FYI: хоча я сумую за цим, це простота, cron залишилася в минулому в OS X. Це був сторожовий собака на пантері. З часу Тигра він був запущений. Отже, якщо ви використовуєте Leopard cron, це не варіант.
Ви можете використовувати cron для планування завдань.
crontab -e
Завдання вказано у наступному форматі.
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
Приклад:
0 12 * * * cd ~/backupfolder && ./backup.sh
Після встановлення завдань cron ви можете використовувати crontab -l для переліку своїх завдань.
crontab -l
Якщо ви хочете дізнатись більше про вирази розкладу cron, ви можете отримати доступ
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html