Корисні поради по linux планування завдань за допомогою cron та at
Системи Linux® і UNIX® дозволяють планувати як одноразове, так і періодичне виконання завдань. У цій статті, взятої з навчального посібника Підготовка до іспиту LPI 102: Завдання адміністрування (LPI exam 102 prep: Administrative tasks). показано, як це робити.
Виконуйте завдання через рівні проміжки часу
Виконання завдань через рівні проміжки часу управляється функцією cron. яка складається з демона crond і набору таблиць, що описують, яка робота і як часто повинна виконуватися. Демон прокидається кожну хвилину і перевіряє файли розкладів (crontabs), щоб визначити, що потрібно зробити. Користувачі управляють цими файлами за допомогою команди crontab. Демон crond зазвичай запускається процесом ініціалізації (init) при завантаженні системи.
Для простоти давайте уявимо, що ви хочете регулярно запускати команду, показану в лістингу 1. Вона всього лише повідомляє дату і час, але на її прикладі можна зрозуміти, як використовувати crontab для установки завдань для cron, а з виведення ми дізнаємося, коли вона була виконана. Створення записів в файлі розкладів вимагає рядки з прихованими метасимвол програмної оболонки, тому краще буде зробити це за допомогою простих команд і параметрів. У цьому прикладі команда echo буде запускатися з скрипта /home/ian/mycrontab.sh, якому не потрібні параметри. Таким чином, не потребутся копітка робота з прихованими символами.
Лістинг 1. Приклад простий команди
Створення файлу розкладів
Кожен запис у файлі розкладів складається з шести полів:
- хвилина
- Година
- день місяця
- місяць
- День тижня
- Рядок, яка повинна бути запущена за допомогою sh
Хвилини і годинник повинні бути в межах від 0 до 59 і від 0 до 12 відповідно, а день місяця і місяць - від 1 до 31 і від 1 до 12, відповідно. День тижня змінюється від 0 до 6, де 0 відповідає неділі. Також він може позначатися як sun, mon, tue і т.д. Шосте поле - це все, що йде за п'ятим і інтерпретується як рядок для передачі в sh. Знак відсотка (%) передається як початок рядка, тому якщо ви хочете використовувати% або будь-який інший спеціальний символ, ставте перед ним зворотний слеш (\). Рядок до першого% передається в програмну оболонку, а все, що після%, йде в стандартне введення.
Різні поля, що відносяться до часу, можуть мати одне конкретне значення, інтервал значень, наприклад 0-10 або sun-wed, або розділений комами список окремих значень або інтервалів. В деякій мірі штучно створена запис у файлі розкладів для команди з нашого прикладу може виглядати як в прикладі з лістингу 2.
Лістинг 2. Приклад простого файлу розкладів
Як щодо виведення?
Вас може зацікавити, що відбувається з висновком команди. Більшість команд, що працюють з функцією cron, направляє висновок в журнал за допомогою функції syslog, яка обговорюється в навчальному посібнику Підготовка до іспиту LPI 102: Завдання адміністрування (LPI exam 102 prep: Administrative tasks). Однак будь-який висновок, який направляється в stdout, буде відправлений користувачеві поштою. У лістингу 3 показаний висновок, який користувач може отримати від команди з нашого прикладу.
Лістинг 3. Висновок cron, отриманий поштою
Де знаходиться мій файл розкладів?
Файл розкладів (crontab), який ви створили за допомогою команди crontab. зберігається в / etc / spool / cron під ім'ям користувача, який створив його. Таким чином, файл розкладів, про який йшлося вище, зберігається в / etc / spool / cron / ian. Знаючи це, ви не здивуєтеся, що команда crontab. як і passwd. є suid-програмою, яка виконується з правами root.
/ Etc / crontab
На додаток до призначених для користувача файлів розкладів в / var / spool / cron cron також перевіряє / etc / crontab і файли в каталозі /etc/cron.d. У цих системних файлах розкладів є ще одне поле, між п'ятим, відповідним дня тижня, і командою. Воно визначає користувача, для якого буде виконуватися команда, як правило, цей користувач - root. / Etc / crontab може виглядати, як приклад з лістингу 4.
Лістинг 4. / etc / crontab
У цьому прикладі фактична робота виконується командою run-parts. яка запускає скрипти з /etc/cron.hourly, /etc/cron.daily і т.д .; / Etc / crontab просто контролює тимчасової режим періодичних завдань. Зверніть увагу, що всі команди тут виконуються з правами root. Зауважте також, що файл розкладів може містити присвоювання змінних shell, які будуть встановлені перед запуском команд.
Функція cron хороша для систем, які працюють постійно. У випадках, коли система може досить довго знаходитися в вимкненому стані, наприклад в ноутбуках, плановий запуск завдань, який зазвичай щодня, щотижня або щомісяця здійснює cron, може виконувати функцію anacron (що означає "анахронічний cron", "anachronistic cron"). Anacron не підтримує повсякчасне виконання завдань.
Anacron зберігає файли з тимчасовими мітками в / var / spool / anacron, роблячи в них записи, коли робота виконується. При запуску anacron перевіряє, скільки днів минуло з минулого виконання завдання, і при необхідності запускає його. Таблиця із завданнями для anacron зберігається в файлі / etc / anacrontab, формат якого трохи відрізняється від / etc / crontab. Так само як і / etc / crontab, / etc / anacrontab може містити установки середовища. Кожному завданню відповідає чотири поля:
Період - число днів, але можна визначити його як @monthly, щоб завдання виконувалося тільки раз на місяць, незалежно від того, скільки в ньому днів. Затримка - скільки хвилин треба чекати від моменту, коли завдання готове до виконання, до його запуску. Цим користуються, щоб уникнути потоку завдань при включенні системи. Ідентифікатор завдання може містити будь-який непорожній символ, крім Слеш (/).
І / etc / crontab, і / etc / anacrontab модифікуються безпосереднім редагуванням. Не треба використовувати команду crontab. щоб оновити ці файли або файли в каталозі /etc/cron.d.
Виконуйте завдання в певний час
Буває необхідно виконати завдання лише раз, а не робити це регулярно. З цією метою користуйтеся командою at. Завдання, які повинні бути виконані, Новомосковскются з файлу, вказаного з прапором -f. або зі стандартного вводу stdin, якщо -f не використовується. Прапор -m відправляє лист користувачеві, навіть якщо у команди немає стандартного виводу. Прапор -v показує час, коли завдання буде запущено перед читанням завдання. Час також показується у висновку.
У лістингу 5 наведено приклад роботи сценарію mycrontest.sh. який використовувався раніше. У лістингу 6 показаний висновок, який відправляється користувачеві після запуску завдання. Зверніть увагу, що він кілька більш компактний, ніж той, що відсилається функцією cron.
Лістинг 5. Використання команди at
Лістинг 6. Висновок завдання, запущеної командою at
Вказівка часу може бути досить складним. У лістингу 7 наведено кілька прикладів. Більш детальну інформауію можна знайти на сторінках довідника man, присвячених команді at. в файлі / usr / share / doc / at / timespec або в файлі типу /usr/share/doc/at-3.1.10/timespec, де 3.1.10 відповідає версії пакету at.
Лістинг 7. Значення часу в команді at
Для команди at є також опція -q (queue - черговість). Збільшення черговості збільшує значення nice для завдання. Існує також команда batch. яка схожа на at. за винятком того, що команди виконуються тільки коли система досить мало завантажена. Більш детально ці властивості описані на сторінках довідника man.
Керуйте запланованими завданнями
Лістинг 8. Відображення запланованих завдань
Лістинг 9. Використання at -c з номером завдання
Зверніть увагу, що вміст нашого сценарію було скопійовано у вигляді вбудованого документа, який буде виконаний програмною оболонкою, визначеної в змінної SHELL або / bin / sh, якщо змінна SHELL не встановлена. У навчальному посібнику Підготовка до іспиту LPI 101, тема 103: Команди GNU і UNIX (LPI exam 101 prep, Topic 103: GNU and UNIX commands) можна подивитися вбудовані документи, якщо є необхідність.
Видалення запланованих завдань
Всі заплановані в cron завдання можна видалити командою cron з ключем -r. як показано в лістингу 10.
Лістинг 10. Відображення і видалення завдань cron
Для видалення системних задач cron або anacron відредагуйте / etc / crontab, / etc / anacrontab або відредагуйте або видаліть файли з каталогу /etc/cron.d.
Одну або більше завдань, запланованих за допомогою at. можна видалити командою atrm із зазначенням номера завдання. Кілька завдань повинні бути розділені пропуском. У лістингу 11 наведено приклад.
Лістинг 11. Відображення і видалення завдань за допомогою atq і atrm
Налаштуйте призначений для користувача доступ до планування завдань
Якщо файл /etc/cron.allow існує, будь-який користувач, який не є суперкористувачем root, повинен бути зазначений в ньому, щоб мати можливість використовувати crontab і cron. Якщо такого файлу немає, але є /etc/cron.deny, користувач, який не є суперкористувачем root і потрапив в список з цього файлу, не зможе користуватися crontab або функцією cron. Якщо немає ні того, ні іншого файлу, то тільки суперкористувачеві буде дозволено використовувати цю команду. Порожній файл /etc/cron.deny (а за замовчуванням він порожній) дає можливість всім користувачам працювати з функцією cron.
Аналогічні файли для at - /etc/at.allow і /etc/at.deny.
Дізнайтесь більше
Отримати продукти і технології
- Свою наступну розробку в Linux створюйте з пробним ПО IBM. доступним для скачування прямо з developerWorks.