Хтось може порекомендувати хороший підручник для написання (з нуля) завдання, розпочатого в стилі крона?


19

У мене досить проста робота, яку я хотів би працювати кожну годину. Я міг би це зробити, використовуючи cron, але думав, що буду використовувати це для того, щоб дізнатися про нього launchd, оскільки чую про це хороші речі. Я отримав цю man launchd.plistсторінку як орієнтир, але я шукаю щось, що ґрунтується на побудові прикладної роботи.


Це потрібно перенести на Stackoverflow.
Філіп Реган

5
@Philip Regan Я думав про це, але в мене насправді не так багато програмування. Якби я задав cronпитання, чи не був би superuser.com правильним місцем? Оскільки launchdце версія Apple cron(а також daemontools, можливо, й інші речі), я вважав, що це найкращий варіант.
Хенк Гей

Ви також можете помістити його в сценарій автоматизатора та запустити з iCal - якщо він працює як ви
user151019

У кумедній іронії, через три роки мені потрібно здійснити процес крона / запуску, і я опинився на цьому питанні знову в зовсім іншому світлі. Переповнення стека має неоднозначну думку про те, що робити із запущеними питаннями, але вони справді не люблять цих питань. Просто подумав, що вся ситуація забавна. +1
Філіп Реган

Відповіді:


14

launchdзапускає Daemons ( /Library/LaunchDaemonsабо /System/Library/LaunchDaemons) як корінь і запускатиме їх незалежно від того, користувачі ввійшли чи ні. Агенти запуску ( /Library/LaunchAgents/або ~/Library/LaunchAgents/) запускаються, коли користувач зареєстрований як цей користувач. Не можна використовувати setuid для зміни користувача, який запускає скрипт на демон. /SystemКаталог зарезервований для Mac OS X завдань , тому я рекомендую покласти ваш launchdplists в яких /Libraryабо ~/Libraryпапку , як це має сенс.

Отже, перший крок - це визначення агента чи демона.

Другий крок - зробити свій .plistфайл. Ви можете використовувати програми на основі GUI, такі як Lingon, щоб допомогти з цим або просто скористатися улюбленим текстовим редактором:

Зразок .plistдля запуску сценарію щогодини ( StartIntervalабо StartIntervalCalendarце потрібні нам ключі - StartIntervalщоб елемент траплявся щосекунди x, StartIntervalCalendarпротягом певного часу та / або дати. Див. 126907 в SuperUser, наприклад, зроблений із StartCalendarInterval):

<?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>OnDemand</key>
    <true/>
    <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>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>

Змініть .plistнеобхідне, щоб вказати на ваш скрипт та будь-які аргументи за необхідності (аргументи знаходяться в окремих рядках) та збережіть файл із тим самим іменем, що й значення Label, але .plistв кінці. (наприклад, local.my-mac.flickrstatsбуде збережено як local.my-mac.flickrstats.plist). Якщо ви ще цього не зробили, перемістіть цей .plistфайл до, /Library/LaunchDaemonsстворюючи Daemon (працює весь час) або до ~/Library/LaunchAgents(тільки ви ввійшли в систему) або /Library/LaunchAgents(будь-який користувач увійшов у систему).

Щоб почати завдання, яке потрібно виконати, launchctlяк потрібно, щоб завантажити файл. Для предметів у /Library, слід використовувати sudo: наприклад,sudo launchctl load -w /PATH/TO/PLIST

Для ознайомлення також ознайомтеся з наступними питаннями про Super User: команда Launchd як root , Завантажте системний демон і як я можу змусити сценарій запускатися щодня


4

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

Я знаю, що це не повний підручник, але за допомогою нього ви можете зрозуміти основи launchd.

Він також надає приклад crondзавдання:

<?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.apple.periodic-daily</string>
    <key>ProgramArguments</key>
    <array> 
        <string>/usr/sbin/periodic</string>
        <string>daily</string>
    </array>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
    <key>StartCalendarInterval</key>
    <dict>  
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>15</integer>
    </dict>
</dict>
</plist>

Я заявив, що ви визнали, що ресурс - це не те, про що я просив, і це вразило мене як трохи RTFM, але я переосмислив це і хотів би відмінити свій потік. На жаль, я не можу, якщо питання не буде відредаговано (воно було занадто довго), і мені ще не вистачає репліка для редагування. Не могли б ви підправити щось? Спасибі.
Генк Гей

@Hank Gay: Дякую за ваш коментар. Я також відредагував свою відповідь.
Студент


2

Я знаю, що ви шукали підручник, але випадково хтось приходить сюди, як частина пошуку інструменту, який допоможе їм зробити / редагувати запущені записи, я використовував це раніше: Lingon (sourceforge)

Це вже не активно розвивається, але те, що там працює (і, очевидно, включає джерело тощо). Я використовував його на Snow Leopard для планування резервного копіювання на хмару Амазонки тощо.


Lingon зараз знаходиться в App Store, тому він все ще активний, просто не вільний. Дивіться < peterborgapps.com/lingon >
користувач151019

Версія appstore була скалічена вимогами політики Apple. Попередньо складена версія SourceForge працює добре - хоча модальне діалогове вікно збереження, що дозволяє мені вийти з системи або перезапустити, щоб демон не відхиляв. Мені довелося вийти з програми з меню (не змусити вийти) і перевірити, чи правильно вона зберегла файл. Скалічені у цьому триггері файлу та каталогу не підтримуються, а також неможливо створити те, що працює як root з версією AppStore.
марфарма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.