Crontab - Якщо у вас зараз важкий веб-сайт, можливо, ви хочете запустити певні процеси, такі як збагачення даних або створення мініатюр у фоновому режимі, не заважаючи користувальницькому інтерфейсу. Ну, у Linux crontab є гарна програма, яка робить саме це: Cron.

Вступ до Cron

То що це за програма? Cron класифікується як демон, який може виконувати заплановані команди. Він автоматично запускається при введенні рівнів запуску для багатьох користувачів з /etc/init.d. Він шукає область золотника за адресою / var / spool / cron / crontabs для файлів crontab, названих після облікових записів у / etc / passwd. Щоб отримати доступ до crontabs у цьому каталозі, вам потрібно використовувати команду crontab, а не безпосередньо отримувати доступ до них. Cron також може читати незначний різний формат / etc / crontab, а також файли в /etc/cron.d.

Після налаштування, Cron прокидається щохвилини, вивчає збережені linux crontabs і перевіряє команду, щоб перевірити, чи є що-небудь виконати. Якщо команда виконується і результат генерується, вихід висилається власнику crontab або користувачеві зі змінною MAILTO у crontab. Дочірні копії крона, який виконує ці процеси, називаються великими літерами, що ви побачите на виході ps та syslog.

Cron також перевіряє кожну хвилину на предмет змін у модному режимі каталогу котушки. Якщо є зміни, то він вивчає мод час усіх ліцензій Linux і перезавантажує ті, що змінилися. В результаті, cron не повинен перезапускатися, коли файл crontab змінюється.

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

Зачіпаються лише завдання, які виконуються в певний час, а не погодинні або ті, що позначені символом "*" у специфікаторі хвилини / години. Роботи, визначені для диких автомобілів, негайно виконуються відповідно до нового часу. У разі зміни годин, що перевищують три години, негайно використовується новий час.

У Red hat та Debian, cron розглядає файли cron.d як розширення до файлу crontab linux, оскільки вони відповідають спеціальному формату файлу, а це означає, що вони містять поле користувача. Ця функція має на меті дозволити пакетам, які потребують більш точного контролю планування, ніж щоденні, щомісячні або щотижневі каталоги. Такі файли в ідеалі мають бути названі на честь їхніх постачальників. Файли повинні відповідати умові іменування, що використовується для бігових частин, оскільки вони повинні складатися виключно з великих і малих літер, цифр, дефісів і підкреслених знаків. Файли в каталозі cron.d відстежуються на предмет змін, як і в каталозі crontab linux. Для таких команд, як / bin / ls, обов'язково використовуйте абсолютні імена шляху для виклику правильної команди.

Вступ до Linux Crontab

Тепер, коли ви знаєте додаткові та недоліки cron, давайте уважно подивимось на linux crontab, що є програмою для встановлення, видалення чи перелічення таблиць для керування самим демон. Кожен користувач може мати власний crontab linux, а файли доступні в каталозі crontabs, але не призначені для прямого редагування.

Будь-яка команда, задана в linux crontab користувача, буде виконуватися як власник користувача. Вкладки, провідні місця та порожні рядки зазвичай ігноруються. Рядки, які мають хеш-знак як перший непробільний символ, ігноруються, оскільки вони трактуються як коментарі. Варто зазначити, що коментарі не допускаються в тих же рядках команд cron, як вони будуть читатися як частина команди. У подібній примітці коментарі також заборонені для рядків із налаштуваннями змінної середовища.

У linux crontab активний рядок з командою cron або параметром змінної середовища, яка знаходиться у формі "name = значення", де проміжки можуть бути додані, якщо потрібно, навколо знака рівності. Будь-які наступні провідні пробіли є частиною значення імені. Рядок значень може бути розміщений в одинарних або подвійних відповідних лапках для збереження проміжних чи провідних пробілів. Він не розбирається на заміну довкілля, тому ви можете виявити, що рядки типу "PATH = $ HOME / bin: $ PATH" не працюватимуть, як очікувалося.

Багато налаштувань навколишнього середовища встановлюються автоматично за допомогою cron, наприклад, HOME та LOGNAME встановлюються з лінії passwd користувача, і SHELL встановлюється в / bin / sh, а PATH встановлюється в / usr / bin: / bin. Ви можете замінити PATH, SHELL та HOME за допомогою налаштувань crontab. LOGNAME не можна змінити, оскільки це робота, з якої виконується завдання. У системах BSD ця змінна може називатися USER, і в цьому випадку також буде встановлено USER.

Якщо відправлення пошти є частиною команд, що виконуються в linux crontab, cron також буде дивитись на MAILTO. Якщо змінна визначена та не порожня, надісланий користувач надсилає пошту. Але якщо вона порожня, не надсилається пошта, а натомість пошта надсилається власнику linux crontab. Якщо файл cron.allow доступний, вам потрібно буде вказати його для використання цієї команди. Якщо цього файлу не існує, але існує файл cron.deny, його слід видалити з цього файлу, щоб скористатися командою. Якщо жоден файл не існує, тільки суперкористувач зможе використовувати команду залежно від параметрів, що залежать від сайту. Крім того, всі користувачі зможуть використовувати команду, що стосується стандартних систем Debian.

Якщо параметр –u доступний, він вказує ім’я користувача, чия linux crontab вимагає налаштування. Якщо не вказано, то crontab вивчає crontab користувача, який виконує команду. Важливо використовувати цю опцію завжди задля безпеки під час роботи всередині su, оскільки linux crontab може переплутати su. Опція -l доступна для відображення поточного crontab на стандартному виході, тоді як опція -r видаляє поточний crontab. Команда -e використовується для редагування поточної linux crontab за допомогою редакторів, визначених змінними середовища EDITOR або VISUAL. Ви не можете використовувати жодного редактора, який від’єднує та відтворює файл; вам потрібен редактор, який редагує файл на місці. Після виходу з редактора налаштований Linux crontab буде автоматично встановлений.

Модуль pam_env також підтримується cron в системі Debian GNU / Linux, завантажуючи середовище, як зазначено у файлі модуля. Однак слід зазначити, що параметр PAM не перевершує вищезазначені настройки або параметри файлу crontab. Якщо ви хочете, щоб PATH відрізнявся від місця розташування біна, вам потрібно встановити його у файлі crontab. Cron за замовчуванням надсилатиме пошти, використовуючи тип вмісту 'text / plain' з набором параметрів набору символів, до кодового набору / символьної карти в локальній місцевості, де запустився cron, що є локальним системним локалом за умовчанням без будь-якого набору змінних оточення або локаль, який створили змінні. Ви можете додати свої власні кодування символів для виводу пошти, встановивши змінні "Content_Transfer_Encoding" та "Content_Type" на кронах, щоб відповідати заголовкам пошти імен.

Рекомендовані курси

  • Інтернет-курс R Studio Anova Techniques
  • Сертифікаційне навчання в AngularJS
  • ISTQB Сертифікаційний курс рівня 1
  • Навчання з сертифікації з основ тестування програмного забезпечення

Робота над Crontab

Команда crontab, знайдена в Unix-подібних та Unix-операційних системах, може бути доступна через термінал. Щоб побачити, що зараз працює crontab, відкрийте термінал у своїй системі та запустіть таку команду:

$ sudo crontab -l

Для редагування списку завдань crontab можна скористатись такою командою:

$ sudo crontab -e

Ця команда відкриває редактор за замовчуванням у вашій системі, який може бути pico або vio, щоб змінити crontab. Щоб зберегти завдання crontab у файлі crontab, збережіть та вийдіть із редактора. Роботи Crontab або Cronjob можна записати так:

* * * * * /bin/execute/this/script.sh

У вищезазначеній команді є п'ять зірочок, кожна з яких представляє різні частини дати для планування завдання. Ось вони:

  1. Хвилина, починаючи від нуля до 59
  2. Година, починаючи від нуля до 23
  3. День місяця, коливаючись від одного до 31
  4. Місяць, коливається від одного до 12
  5. День тижня, коливається від нуля до шести, з нульовим значенням - неділя

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

Тепер припустимо, що ви хочете просто виконувати сценарій щополудні неділі, ось що ви робите:

0 12 * * 0 /bin/execute/this/script.sh

Тепер сценарій виконується, коли системний годинник вражає 1200 годин щонеділі, щотижня кожного місяця. Тепер, якщо ви хочете виконати сценарій кожного робочого дня о 12 годині дня, ось що ви пишете:

0 12 * * 1-5 /bin/execute/this/script.sh

Cron виконує команди, коли поля року, місяця, години та хвилини відповідають поточному часу або коли принаймні день місяця та року відповідають поточному часу. Поле може бути позначене зірочкою для позначення "перший-останній". Дозволені діапазони чисел, причому діапазони мають два числа, які розділені дефісом. Конкретний діапазон включений, тому діапазон 8-11 для 'годин' визначає виконання о восьмій, дев’ятій, десятій та одинадцятій годинах. Списки також підтримуються, кожне число яких розділяється комами, як '1, 2, 8, 9'. Ви також можете змішувати та поєднувати, так що це може бути "1, 2, 8-11".

Ви можете використовувати значення кроків у поєднанні з діапазонами, з позначенням "/" після діапазону, що вказує пропуск значення числа через діапазон. Наприклад, '0-11 / 2' у полі годин вказує виконання команд через кожну другу годину, яке записується у вигляді такого списку: '0, 2, 4, 6, 8, 10'. Кроки можуть бути дозволені після зірочки, наприклад "* / 2", щоб вказати команду, яку потрібно виконувати кожні дві години. Для полів день і місяць можна використовувати перші три букви цього конкретного дня або місяця, і справа не має значення. Однак списки та діапазони імен не підтримуються. День виконання може бути визначений у двох полях: день тижня та день місяця. Якщо обидва поля обмежені, команда буде виконуватися, коли будь-яке поле збігається.

Решта рядка - це «шосте» поле, яке вказує команду, яку потрібно виконати. Командна частина рядка займає до нового рядка або до% символу. Він виконується sh або вказаною оболонкою у змінній SHELL файлу crontab. Команда% буде змінена на символи нового рядка, якщо вони не будуть уникнуті зворотною косою рисою '\'. Усі дані після першого знаку% надсилаються як стандартне введення в команду. Не можна розділити один командний рядок на кілька рядків.

Планування хитрощів на Crontab

Форматування може зайняти деяке звикання, але ось кілька хитрощів, які допоможуть вам вирішити. Якщо ви хочете проводити кронштейн кожні десять хвилин, ви можете написати це так:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Або ви можете написати це так, що простіше:

* / 10 * * * * /bin/execute/this/script.sh

Також у вас є спеціальні слова, які ви можете додати до поля першої хвилини замість числа, наприклад:

  • @reboot: цей сценарій буде запущений один раз при запуску системи
  • @yearly: запускати команду раз на рік (альтернативний формат буде "0 0 1 1 *")
  • @annually: альтернатива річному ключовому слову
  • @monthly: запускати команду раз на місяць ("0 0 1 * *")
  • @weekly: запускати раз на тиждень ("0 0 * * 0")
  • @daily: запускати раз на тиждень ("0 0 * * *")
  • @midnight: альтернатива щоденному ключовому слову
  • @hourly: працювати щогодини ("0 * * * *")

Зберігання на виході

За замовчуванням, cron зберігає висновок завдання в поштову скриньку або root. Але ви можете зробити результат більш простим і презентабельним, зберігаючи його в окремому файлі журналу. Ось як ви це робите:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux здатний звітувати на різних рівнях. У вас є стандартні помилки STDERR та стандартний вихід STDOUT, позначені як 2 та 1 відповідно. Наступне твердження говорить про збереження STDERR і STDOUT обох, щоб створити єдиний потік даних повідомлень і помилок:

2> & 1

Отже, ми визначили вихідний потік, тепер мусимо дати йому призначення. '>' Перезаписує файл і '>>' додає до нього. Для додавання, яке завжди безпечніше, ви можете використовувати таку команду:

>> /var/log/script_output.log

Висновок

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

Рекомендовані статті: -

Ось кілька статей, які допоможуть вам отримати більш детальну інформацію про Linux Crontab, тому просто перейдіть за посиланням.

  1. Питання та відповіді щодо інтерв'ю Linux | Корисні та найбільш запитувані
  2. Кар'єра в Linux
  3. 10 найкращих корисних програм для Linux для системних адміністраторів
  4. Linux проти Windows 10