Контакти

Додаткові змінні cron. Просте налаштування cron на linux Cron налаштування кожні 5 хвилин

У ОС Unix існує можливість запускати програми користувача у зазначений час. Для цього використовується програма cron, яка отримує інструкції від користувачів і, виконуючи їх, виконує виконання будь-яких завдань за отриманими сценаріями. Наші клієнти можуть скористатися цією можливістю для виконання періодичних завдань.

Як налаштовувати cron у Власному кабінеті (для unix-тарифів)

Оскільки всі PHP-програми можуть працювати через CLI SAPI без попередньої модифікації, можна запускати їх через wget. Наприклад:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Якщо у скрипті використовуються функції require, include, причому в них вказані відносні шляхи, то на початку скрипту використовуйте виклик функції chdir(), яка задасть поточну робочу директорію

Як отримувати повідомлення про помилки від програм, що запускаються cron

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

MAILTO=адрес@домен.ru

Звичайно, адреса@домен.ruпотрібно замінити на реально існуючу адресу електронної пошти, куди треба буде доставляти повідомлення. Якщо потрібно отримувати повідомлення про помилки на кілька адрес, вкажіть всі ці адреси через кому.

Зверніть увагу на те, що cron буде надсилати поштою те, що виводять скрипти, що запускаються. Наприклад, якщо ви напишете скрипт, який друкуватиме рядок «Hello, world» і поставите його на виконання через cron, ви отримуватимете поштою лист з рядком «Hello, world» щоразу, коли cron запускатиме такий скрипт.

Щоб уникнути цього, наприклад, коли текст, який виводиться скриптом, вам не потрібен, треба додати в кінець рядка-сценарію для cron символи

> /dev/null 2>&1

Повністю рядок для cron виглядатиме так:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Рекомендуємо перевіряти коректність синтаксису скриптів, які ви встановлюєте виконання через cron. Скрипти можуть містити помилку, можуть неоднаково працювати при запуску через веб-сервер і через cron, і таке інше. Для того, щоб переконатися, що скрипт правильно працюватиме через cron, попередньо перевірте його такою командою в unix shell:

/usr/local/bin/php -l script.php

Якщо помилок у скрипті немає, ви побачите повідомлення "No syntax errors detected in script.php".

Обмеження

Для програм, які запускаються через cron, діють такі ж обмеження по ресурсах, що споживаються, як для процесів, що запускаються користувачем в unix shell. Йдеться про обмеження на час виконання програми, кількість доступної пам'яті, обмеження на розмір файлів і так далі.

Дуже часто в Linux-подібних системах може знадобитися автоматизувати деякі рутинні процеси. Для цього застосовуються спеціальні планувальники. Одним з найвідоміших з них є Cron, про налаштування якого і йтиметься у цій статті.

Що таке Cron?

Назва програми утворена від грецького "хронос", що означає час. Що, власне, логічно. Завдання демона — у певні моменти виконувати записані команди. Сам процес реалізації заснований на перевірці таблиць крона та порівнянні їх з часом.

Файл crontab

Найголовнішим елементом налаштування Cron є конфігураційний файл crontab. Він містить у собі команди виконання та шляхи до скриптів. Усі вони запускаються від імені суперкористувача. Так як вони розташовані в директорії /etc/cron.d, налаштування цих файлів повинно проводитись саме там.

Для кожного окремого користувача системи використовується файл crontab.

Різні дистрибутиви Linux використовують свої каталоги для зберігання налаштувань користувача. Для RedHat це var / spool/cron. У Debian та Ubuntu це буде var/spool/cron/crontabs. І var/spool/cron/tabs у SUSE.

Список команд для керування crontab

Cron має набір спеціальних директив, за допомогою яких можна керувати планувальником. Застосовувати їх потрібно у зв'язку з crontab. Ось невеликий список:

  • -u Ім'я_користувача. Встановлює користувача, із завданнями та налаштуваннями якого будуть виконуватися подальші дії. Якщо опустити цей ключ, буде заданий користувач за замовчуванням.
  • -l. Виведе поточний перелік завдань.
  • -e. Здійснює запуск редактора для планувальника завдань.
  • -r. Видаляє всі наявні завдання зі списку.

Формат завдання

Як було сказано вище, налаштування Cron полягає у завданні команд у спеціальному файлі. Виглядає це як простий запис, що складається з шести колонок:

  • у першій вказується кількість хвилин. Доступний інтервал – від 0 до 59. Можна використовувати декілька значень, діапазон та спеціальні символи;
  • друга колонка - годинник. Можуть використовуватись значення від 0 до 23;
  • далі – день. Тут можна зазначити число від 1 до 31;
  • четвертий – місяць. Мінімальне значення 1, максимальне - 12;
  • п'ятий - тиждень. 0 чи 7 відповідає неділі;
  • останньою йде сама виконувана команда.

Як згадувалося, у файлі можна вказати спеціальні символи, «*» чи «/». Наприклад, такий запис - 23 * / 2 *** echo "Виконати" означає, що кожна парна година і 23 хвилини буде відображатися напис "Виконати".

Особливості файлу crontab

При налаштуванні Cron необхідно пам'ятати, що він має специфічні властивості, які варто враховувати при конфігуруванні:

  • кожен файл обов'язково повинен завершуватися порожнім рядком, інакше останній пункт може бути проігнорований, а іноді весь файл;
  • файли, які розміщені в каталогах, що мають в імені точку, також будуть проігноровані планувальником;
  • у файлах настройки можна використовувати символи ґрати «#». Вони використовуються для того, щоб відзначити рядки з коментарями. Це дуже зручно для опису запланованих завдань та команд.

Додаткові змінні

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

  • sun - неділя;
  • mon - понеділок;
  • tue - Вівторок;
  • wed - Середовище;
  • thu - четвер;
  • fri - п'ятниця;
  • sat – субота.

Для місяців також є окремі буквені значення - Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.

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

  • @reboot. Команда стартуватиме щоразу під час запуску комп'ютера;
  • @yearly. Це завдання буде запускатися один раз на рік. Еквівалентний їй запис у числовому вигляді може бути таким: 0 0 1 1 *. Її синонім ще можна записати як @annually;
  • @monthly. Як можна здогадатися з назви, ця змінна здійснює запуск команди раз на місяць. Її числовий аналог - 0 0 1 * *;
  • @weekly. Ця змінна запускатиметься щотижня;
  • @dayly. Раз в день;
  • @midnight. Запуск буде здійснено опівночі;
  • @hourly. Кожну годину.

Налаштування Cron у Centos 7

Сам процес встановлення та конфігурування мало чим відрізняється від інших схожих Linux дистрибутивів. Перед налаштуванням Cron у Centos необхідно встановити пакет cronie у систему. Це можна зробити за допомогою команди yum install cronie. Для створення файлу з інструкціями потрібно виконати термінал crontab -e. Усі системні налаштування Cron зберігатимуться за адресою /var/spool/cron/ім'я користувача.

Декілька корисних прикладів для створення часто повторюваних завдань

Можна налаштувати Cron таким чином, щоб охопити практично всі потреби будь-якого користувача.

  • 00 09-17 * * 1 - 5 /шлях/ до команди/ крона. Ця команда автоматично виконуватиме заплановану дію кожного робочого дня з 9 до 5 годин кожну першу хвилину;
  • 00 9,17 * * * /шлях/ до команди/ крона. У цьому прикладі відбувається виконання команди двічі на день. Перший о 9, другий - о 5 годині. Знак «*» показує, що команда виконуватиметься щодня, місяць та рік;
  • Також не варто забувати і про символьні змінні. Наприклад, @monthly буде виконувати завдання щомісяця в першу хвилину першої години першого дня. А @daily запускатиметься щодня.

Cron (крон), Crontab (кронтаб), Планувальник завдань- ці назви всі, хто пов'язаний із «сайтобудуванням» чули неодноразово. Так що таке Cron? Як із ним працювати? Навіщо потрібен Cron та як його правильно налаштувати?Усі ці питання ми сьогодні й розберемо.

Перше що хочу відразу відзначити: Cron, Crontab, Планувальник завдань- це все одно і теж, не бентежтеся від різноманітності назв.

У практиці будь-якого web-майстра, незмінно виникне необхідність запуску будь-яких завдань за розкладом. Тобто. Ви просто прописуєте потрібну Вам команду на виконання якоїсь задачі в заданий час, і все. Далі все відбувається без Вашої участі – автоматично, і що найприємніше у потрібний Вам час.

Наприклад, Вам потрібно періодично надсилати повідомлення партнерам електронною поштою. Або Ви бажаєте встановити автоматичні привітання чи нагадування. Або у Вас є каталог сайтів і Ви хочете, щоб із заданою періодичністю скрипт каталогу перевіряв зворотні посилання і т.д. Всі ці завдання можна легко автоматизувати, доручивши це Cron або, як ще кажуть – Планувальнику завдань. А бувають скрипти, в яких для нормальної роботи Крон просто необхідний.

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

Отже, давайте розглянемо всі практичні дії з настоянки Cron на прикладі русcіфікованої cPane l (панелі керування сайтом) Хостингової компанії Гудзон. Чому саме Гудзон? Все просто - тут живе мій сайт і мені дуже подобається цей хостинг: повний пакет всіх можливих послуг за дуже помірну ціну.

Хоча налаштування Планувальника завданьвідбувається приблизно скрізь однаково.

Заходимо в панель керування сайтом, в даному випадку це cPanel (бувають інші). Доступ Вам надається відразу після покупки Хостингу, опускаємося нижче і знаходимо такий розділ, Додаткові інструменти:

Знаходимо у цьому розділі Планувальник завданьі клацаємо по ньому. Іноді це меню називається Панель Cron. Ось як характеризується Cron:

"Планувальник завдань дозволяє вам запускати команди у вказаний час без вашої участі. Це дозволяє вам автоматизувати роботи, що регулярно повторюються. Планувальник завдань налаштовуються дуже гнучко і дозволяють вам автоматизувати виконання будь-яких команд, які ви захочете запустити. Наприклад, ви можете вказати планувальнику видаляти тимчасові файли щотижня, щоб вони не займали надто багато місця на вашому диску.

На вибір надається два варіанти управління Кроном:

Стандартний та Просунутий (у стилі Unix), розглянемо кожен із них.

Перший варіант.Клацаємо по кнопці Стандартний, відкривається вікно установки задач:

Як бачите, тут все дуже просто. Потрібно просто встановити час виконання команди, вказавши для цього у відповідних полях, коли запускатиметься команда, о котрій: Хвилин, Година, День, Місяць, День тижня. І звичайно ж прописати саму команду на запуск у полі: Команда для запуску.

Значення можна писати як у ручну (у лівому полі), так і скористатися списком, що випадає (стрілочки праворуч).

Розберемося, що ми тут написали. А написали ми наступне завдання: запускати команду на виконання:
/usr/bin/php /home/freeman/domains/public_html/cron/new_day.php
кожні 30 хвилин, кожні 6 годин, щодня січня місяця, якщо він потрапляє на понеділок.

Після встановлення завдання натискаємо кнопку Add New Cron Job.

Не зрозуміло, що написали? :) Давайте розглянемо другий варіант, а потім поясню докладніше. Повертаємось на провідну сторінку.

Другий варіант.Клацаємо по кнопці Просунутий (у стилі Unix), відкривається вікно встановлення завдань:

Цей варіант встановлення завдання Крону мені подобається більше. І хоч він і називається "Просунутий", на мій погляд простіше і зручніше.

Тут так само як і в першому випадку, потрібно вказати коли запускатиметься команда, так само вказуємо: Хвилины, Годинаы, День, Місяць, День тижняі саме завдання на виконання у полі Команда. Після цього натискаємо кнопку Додати Cronjob. Завдання задано. Сторінка оновлюється:

Ви можете додати нове завдання, повторивши всю процедуру заново. Видалити завдання можна натиснувши на хрестик навпроти завдання праворуч.

Є ще один необов'язковий параметр, але я рекомендую його прописувати: це адреса електронної пошти. На цю адресу надходитиме звіт про виконання команди. Поле необов'язкове, але краще адресу ввести, щоб бути в курсі справи, якщо щось піде не так Крон повідомить Вам про це в листі, а якщо лист прийшов порожній означає все ОК!

Що ми тут написали? Запускати команду в 11 хвилин, кожної 2-ї години, кожен день, кожен місяць, 1-й, 3-й, 5-й, 7-й дні тижня.

У полі вибору: Хвилинвказуєте хвилину (або хвилини) в яку запускатиметься завдання, у полі Годинавказуєте годину (або годинник) в який(е) виконуватиметься завдання, а так само день(и), і місяць(и), у кожному полі можна вказати як конкретний час так і інтервал.

Наприклад, можна вказати не просто 11 хвилин, а 11-15 (інтервал), це означає, що завдання запускатиметься кожні 11, 12, 13, 14, 15 хвилин. Або вказати конкретні хвилини, наприклад: 11, 14, 18 - це означає, що завдання буде запускатися на 11, 14 і 18 хвилинах. Ще можна використовувати знак * (зірочка)- Позначає кожен. Якщо поставити * (зірочку)в полі Хвилини, то завдання буде запускатися кожну хвилину, тобто. 60 разів на годину.

У кожному полі можна вказати як конкретний час, так і інтервал, а також використовувати зірочки.

Запис */2 позначає: кожні 2 години. Всі ці варіанти записів застосовні до всіх полів ( Хвилины, Годинаы, День, Місяць, День тижня) при вказівці завдання Крону. Самі розумієте варіантів може бути мільйони, Запускай завдання на виконання, хоч щохвилини цілий рік. Звичайно, така необхідність практично ніколи не виникає, але теоретично така можливість є.

І ще майте на увазі деякі Хостинги накликають обмеження, на запуск Крона, наприклад, не частіше 3 - 10 разів на годину. Чому? Створюється досить відчутне навантаження на сервер. За порушення Ваш обліковий запис можуть заблокувати.

Тепер давайте розберемося як заповнюється поле Команда для запуску(у першому варіанті) або Команда (у другому варіанті).

Завдання задається так.

Насамперед ви вказуєте шлях до PHP на Вашому сервері, у мене на сервері шлях такий /usr/bin/php у вас може бути іншим, уточніть у адмінів вашого сервера, після шляху до PHP ставите пробіл і пишіть повний внутрішній шлях до файлу, який повинен запускати Cron. Допустимо мені необхідно, щоб Крон запускав файл mail.php , знаючи внутрішній шлях до файлу я пишу наступне:

public_html/cron/mail.php

тобто. у кореневій папці public_html , є папка cron у якій лежить файл mail.php а повністю команда на запуск файлу mail.php буде вилядіти так:

/usr/bin/php /public_html/cron/mail.php

На різних хостингах, шлях до PHP може відрізнятися, і записуватися по-різному, коренева папка розташування сайту теж не завжди буває public_htmlтому якщо немає конкретного прикладу запису завдання Крону, то краще про це запитати у адміністратора, описавши що Ви хочете отримати в результаті. Гарна

Оригінал: Using cron scheduler on Linux systems
Автор: Rares Aioanei
Дата публікації: 29 вересня 2011 року
Переклад: А. Кривошей
Дата перекладу: листопад 2011 р.

1. Введення

Якщо ви вже маєте деякий досвід системного адміністрування Linux, то маєте знати, що таке cron і навіщо він призначений. Якщо ж ви тільки починаєте працювати з Linux, то ці знання вам знадобляться. Навіть якщо ви вже вивчали використання cron, ця стаття допоможе вам освіжити знання.
Назва cron походить від Cronos, давньогрецького уособлення часу. І це правильно вибране ім'я, тому що основним призначенням cron є допомога в плануванні різних завдань, які система має виконати у заданий час. Якщо ви користувалися Windows, то ймовірно, вам доводилося копатися в утиліті Scheduled Tasks. Загалом призначення програм аналогічне, але реалізація різна. Cron призначений для серйозних завдань системного адміністрування і має більшу гнучкість. Як приклад реального завдання можна навести резервне копіювання. Чи сподобається вам вручну виконувати резервне копіювання даних на кількох сотнях машин? Думаю ні. Ви просто пишете простий скрипт з використанням rsync, плануєте його виконання, наприклад, щодня, і забуваєте про це. Все, що потрібно надалі - іноді перевіряти логи. Деякі навіть використовують cron для нагадування про важливі особисті події, наприклад, про дні народження. Але cron - це просто демон, який запускає вказані вами завдання. А чи є утиліта, яка допомагає редагувати/додавати/вилучати ці завдання? Звичайно є, і називається вона crontab (від cron table). Однак рухатимемося вперед послідовно і почнемо з інсталяції.

2. Інсталяція cron

Більшість дистрибутивів використовують Vixie Cron та деякі інші похідні як дефолтну реалізацію cron, і саме їх ми розглядатимемо у цій статті. Крім того, практично у всіх дистрибутивах cron вже встановлено, так як він є дуже важливою частиною системи Linux. Хоча звичайний користувач, як правило, ніколи не працює з ним безпосередньо, система та багато програм використовують cron (хорошим прикладом є періодичне оновлення бази даних man-сторінок). Значним винятком є ​​Gentoo, де необхідно вручну встановити vixie-cron і додати його в runlevel за умовчанням. В Arch, Debian, Slackware, Ubuntu, Fedora та OpenSUSE cron встановлено за замовчуванням і автоматично запускається під час завантаження системи. Ми сподіваємося, що ви вивчите man-сторінки cron і crontab, тому що у багатьох дистрибутивах використовуються їхні пропатчені версії, що робиться для кращої інтеграції програми під конкретний дистрибутив. Тому існує ймовірність, що функція, яка є наприклад Gentoo, буде недоступна в Slackware. У будь-якому випадку, немає нічого кращого за читання man-сторінок, особливо якщо маєш справу з новою програмою, яку збираєшся досить часто використовувати.

3. Використання cron

По-перше, ми повинні переконатися, що cron запущено:

$ ps faux | grep cron

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

Root 1424 0.0 0.0 22000 884 ? Ss 13:56 0:00 /usr/sbin/cron

Тепер змусимо cron працювати. Спочатку потрібно подумати про те, яку команду ми будемо використовувати. Чи вона вимагає привілеїв root? Припустимо, ми будемо використовувати crontab, щоб додати простий скрипт для виконання через кожні п'ять хвилин як простий користувач.

3.1. Crontab

3.1.1. приклад

Напишемо простий скрипт, який виводитиме звичайне діалогове вікно на базі curses в терміналі (потрібний dialog і будь-який емулятор терміналу - ми використовуємо xterm):

#!/bin/sh xterm -e "dialog --msgbox "Testing cron..." 234 234" #

Назвемо файл crontest.sh і зробимо його виконуваним, тому що все, що запускається за допомогою cron, має виконуватися:

$chmod +x crontest.sh

Тепер нам потрібно відредагувати таблицю crontab, щоб додати запис для нашого чудового скрипту:

E ставиться для редагування, -r - видалення. Будьте дуже обережні! Багато системних адміністраторів з необережності вводили -r замість -e, тим більше, що ці клавіші розташовані поруч, і видаляли всі записи з crontab. У будь-якому випадку, швидше за все, ви побачите повністю закоментований файл (в crontab для позначення коментарів використовується #), в якому наведені приклади та описані призначення полів записів. Так, запис складається з полів, останнє з яких задає команду, що виконується, а інші - тимчасові характеристики. Отже, наш запис у crontab для скрипту, що запускається кожні п'ять хвилин, виглядає так:

$ */5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Нам необхідно експортувати змінну DISPLAY, щоб xterm не видавав помилки "DISPLAY is not set". Тепер подивимося призначення кожного поля.

3.1.2. Поля crontab

Якщо ви працювали раніше з символами для підстановки, то вам не важко опанувати використання зірочки в crontab: вона означає, що замість неї підставляються всі можливі значення поля. Поля за замовчуванням в Linux (будьте уважні, деякі Unix-системи використовують інші реалізації cron) позначають, зліва направо: хвилину, годину, день місяця, місяць, день тижня, рік (необов'язково) та команду, що виконується. Таким чином, якщо ми хочемо, щоб наш скрипт запускався кожні п'ять хвилин, кожну годину, кожен день, кожен місяць і кожен рік, наш запис має виглядати так:

5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Ми закликаємо вас бути обережнішими з полем дня тижня: у вашій країні першим днем ​​тижня може бути понеділок, а в інших країнах їм може бути неділя. Якщо працюєш у мультикультурному, багатонаціональному середовищі, необхідно пам'ятати про культурні та релігійні особливості. Cron надсилає повідомлення користувачеві, якому належить запис, на його поштову адресу за промовчанням ($user@$hostname). Якщо ви бажаєте змінити адресу електронної пошти, просто додайте "MAILTO=$email_address" у crontab. Якщо ви бажаєте вимкнути цю функцію, додайте ">/dev/null 2>&1" в кінець запису.
Тепер, якщо ви вже втомилися від спливаючого кожні п'ять хвилин, знову запустіть crontab -e, щоб видалити або, що простіше, закоментувати запис. Для перегляду вмісту crontab просто використовуйте опцію -l (list).

3.2. Погляд на /etc/

3.2.1. Скрипти cron

У попередніх розділах ми вирішували прості та тривіальні завдання просто для розминки, а тепер ми вже займемося серйозними справами. Заголовок даного розділу відноситься до директорій /etc, які відповідають за періодичні завдання з обслуговування системи. Наприклад, директорія /etc/cron.weekly містить скрипт man-db, який оновлює базу даних man-сторінок. Всі подібні скрипти включені до складу дистрибутива та запускаються згідно з файлом /etc/crontab. Тому, якщо ви хочете розібратися в їх роботі, найкраще вивчити вміст цього файлу. Ви побачите записи, схожі на те, що ми робили раніше, але команди, що виконуються, будуть відрізнятися. "run-parts" – це невелика утиліта, створена для запуску всіх скриптів у заданому каталозі.
Уважний читач може помітити, що /etc/crontab є одне поле, якого ми не бачили при редагуванні свого crontab - це поле "user". Це зроблено з міркувань безпеки. Якщо ви вводите команду crontab -e як $user, це означає, що будь-яка команда запускається від імені $user. Але оскільки /etc/crontab відноситься до всієї системи, необхідно явно задавати користувача, оскільки може знадобитися запускати певні скрипти або програми від імені іншого користувача, а не від root, особливо якщо системний адміністратор піклується про безпеку та додає користувачів та групи до системи по мірі необхідності. Приклад: для резервного копіювання не потрібні всі привілеї root, потрібні лише права на читання та запис у певні директорії, тому адміністратор створює групу backup та користувача backupadmin з необхідними правами та запускає нічні скрипти резервного копіювання за допомогою запису:

30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh

Цей запис запускає скрипт nightlybkup.sh щоночі о 23:30. Якщо ми захочемо запускати резервне копіювання лише з понеділка по п'ятницю, потрібно відредагувати запис:

30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh

Якщо ви захочете запускати резервне копіювання тільки по понеділках, середах та п'ятницях, замініть "1-5" на "1,3,5". Коли ви точно знаєте, що вам потрібно, cron стає зрозумілим та простим у використанні.

4. Роздуми про безпеку

Існує безліч ситуацій, коли ви не хочете, щоб користувач, який має доступ до вашої системи, міг створювати записи crontab. Тут у гру вступають файли /etc/cron.deny та /etc/cron.allow. Їх використання аналогічно /etc/hosts.allow та /etc/hosts/deny, тому, якщо ви працювали з цими файлами раніше, то почуватиметеся як удома. Цих двох файлів (cron.deny і cron.allow) за промовчанням немає в системі, принаймні на системі, в якій ми працюємо, тому за умовчанням всім дозволено створювати записи в crontab. Ви можете перевірити, які файли, що відносяться до cron, є у вашому каталозі /etc за допомогою команди:

$ls / etc | grep cron

І знову нагадуємо, що все сказане справедливо для Linux, оскільки відсутність цих файлів на Solaris означає протилежне, крім того, файли розташовані в інших місцях. Спочатку перевіряється cron.allow, тому зазвичай ми вводимо "ALL" у cron.deny, а потім додаємо користувачів, яким ми хочемо надати доступ до cron.allow.

5. Приклади використання cron

Кожну хвилину:

* * * * * /usr/local/bin/check-disk-space.sh

Команда виконуватиметься кожну хвилину, день та місяць.

Днями:

30 02 10 01,06,12 * /home/$user/bin/checkdrive.sh

Ця команда запускатиме скрипт checkdrive.sh о 02:30 кожне 10 число січня, червня та грудня.

Кожні півгодини:

00,30 * * * * /home/$user/backupdata.sh

Тільки у вихідні:

* * * * 6,7 /usr/bin/weekend

Двічі на день:

20 11,16 * * * /usr/sbin/command

Команда виконуватиметься щодня об 11:20 та 16:20.

Щогодини в один конкретний день:

01 * 2 05 * /sbin/system_command

Кожні 10 хвилин під час п'яти робочих днів (понеділок – п'ятниця):

*/10 * * * 1-5 /usr/local/bin/check-disk-space.sh

Тільки у робочий час:

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

Ця команда виконуватиметься один раз на день з 9 до 17 години.

0 0 1 1 * /usr/local/bin/check-disk-space.sh

Двічі на рік о 12:00 та о 24:00

0 0,12 1 */6 * /usr/local/bin/check-disk-space.sh

Ця команда буде виконуватися двічі на рік (кожні 6 місяців) о 12:00 та о 24:00.

Кожен третій четвер будь-якого заданого місяця о 10:00:

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

Щодня через 20 хвилин після кожної парної години:

20 0-23/2 * * * /usr/local/bin/check-disk-space.sh

Ця команда виконуватиметься щодня через 20 хвилин після кожної парної години (0:20, 2:20...22:20).

6. Висновок

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

Якщо вам сподобалася стаття, поділіться нею із друзями:

, | |

На сьогодні Cron є одним із найпоширеніших способів автоматизації запуску процесів у Linux. Cron – це демон, який працює у фоновому режимі та дозволяє планувати та автоматизувати запуск різних (у тому числі і пов'язаних з підтримкою сервера) завдань. І тому використовується конфігураційний файл кронтаб (crontab).

Установка Cron

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

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install cron

Cent OS/Red Hat Linux:

sudo yum update
sudo yum install vixie-cron crontabs

Після завершення встановлення необхідно переконатися, що cron запущений у фоновому режимі:

sudo /sbin/chkconfig crond on
sudo /sbin/service crond start

Базовий синтаксис

Розглянемо наступний приклад завдання, запуск якого потрібно спланувати:

5 * * * * curl http://www.google.com

Синтаксис планування різних завдань спочатку може здатися заплутаним. Насправді він дуже стислий і простий, потрібно просто розібратися, як його читати. Кожен рядок поділяється на графік та команду. У рядок можна зробити практично будь-яку команду. Графік ділиться на 5 різних полів для планування у такому порядку:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

Приклади використання cron

Цей розділ містить приклади планування найбільш загальних завдань.

Щоб команда автоматично виконувалася щохвилини:

Щоб команда виконувалася кожну дванадцяту хвилину години (08.12, 09.12 тощо):

Щоб команда запускалася кожні 15 хвилин:

0,15,30,45 * * * *

Щоб команда автоматично виконувалася щодня о 4 ранку:

Щоб команда виконувалася щовівторка о 4 ранку:

Графік можна ділити. Тобто замість 0,15,30,45 можна використовувати:

Зверніть увагу на діапазон 2-6. Цей синтаксис запускатиме вказану команду з 2.00 до 6.00 ранку кожні 15 хвилин.

Як бачите, надзвичайно потужний та гнучкий синтаксис cron дозволяє вказати практично будь-який інтервал часу.

Налаштування cron

Розробивши графік виконання завдань, необхідно помістити його у правильній точці системи, щоб демон міг знайти та прочитати його. Загалом, таких точок у системі кілька, але, як правило, такий графік поміщають у crontab користувача. Як мовилося раніше, crontab – це конфігураційний файл демона cron, що містить графік запуску певних команд і програм. Цей файл знаходиться в /var/spool/cron/crontab, але його не можна редагувати безпосередньо. Для внесення файл потрібних програм використовується однойменна команда – crontab. Тобто, щоб відредагувати файл crontab можна просто ввести:

Ця команда відкриє текстовий редактор, за допомогою якого можна зробити всі необхідні зміни; кожну нову задачу потрібно вносити до нового рядка.

Щоб переглянути crontab, не вносячи жодних змін, використовуйте команду:

Очистити crontab можна за допомогою наступної команди:

Користувач із підвищеними привілеями може редагувати crontab інших користувачів за допомогою:

crontab -u<пользователь>-e

Висновок cron

Після виконання завдання cron відправляє вихідні дані на електронну адресу користувача (якщо висновок не потрібно направити в лог або /dev/null). Адреса електронної пошти можна вказати вручну, внісши параметр MAILTO у верхню частину crontab. Також можна вказати оболонку, яку потрібно запускати, шлях до двійкового файлу cron та домашнього каталогу. Для цього:

спочатку відкрийте crontab:

потім відредагуйте його так:

SHELL=/bin/bash
HOME=/
MAILTO=”example@some_user.com”
#This is a comment
* * * * * echo ‘Run this command every minute’

Цей рядок поверне Run this command every minute. Демон cron надсилатиме такий висновок на пошту example@some_user.com. Це, звісно, ​​не дуже зручно. Як уже говорилося раніше, цей висновок можна направляти до лог-файлу, щоб уникнути подібних ситуацій.

Для цього потрібно просто додати:

* * * * * echo 'Run this command every minute' >> file.log

Примітка: символи >> спрямують виведення в балку. Крім логів можна використовувати /dev/null за допомогою наступного PHP-скрипту, що працює у фоновому режимі.

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

Обмеження доступу до cron

Щоб обмежити доступ до демона cron, потрібно використовувати файли /etc/cron.allow та /etc/cron.deny. щоб відкрити (allow) або закрити (deny) доступ певного користувача, потрібно просто внести ім'я користувача у відповідний файл. За замовчуванням демон cron доступний для всіх користувачів. Щоб заборонити доступ всім користувачам та надати доступ тільки користувачеві example, потрібно використовувати наступну послідовність команд.



Сподобалася стаття? Поділіться їй