cron

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

cron — утиліта в операційних системах Unix і Linux, яка дозволяє користувачам виконувати команди або скрипти (групи команд) автоматично в заданий час.

Назва[ред.ред. код]

Назва походить від грец. Chronos — час. (Див. Хронос) або англ. Chronograph (Див. en:Chronograph). [1]

crontab[ред.ред. код]

Кожен користувач системи має свій файл завдань «crontab» (cron табулятор), в якому описано, в який час і які команди і програми запускати від імені цього користувача.

Параметри запуску crontab[ред.ред. код]

Для редагування файлу crontab використовується спеціальна однойменна команда crontab, яка дозволяє не переривати процес cron на час редагування:

  • — команда запускання файлу crontab для його редагування. (англ. edit)
  • -l — команда запускання файлу щоб продивитися його зміст. (англ. list)
  • -r — видалити crontab файл для цього користувача (видалити свій crontab) . (англ. remove)

Таблиця crontab[ред.ред. код]

Кожний рядок у файлі crontab складається з п'яти колонок, що відокремлюються пробілами чи табуляціями. Колонки задають час виконання (Хвилина, Година, День, Місяць, День тижня), в них може міститися число, список чисел, або символ '*'. Решта символів в рядку інтерпретуються як виконувана команда та її параметри.

# .---------------- хвилина (0 - 59) 
# |  .------------- година (0 - 23)
# |  |  .---------- день місяця (1 - 31)
# |  |  |  .------- місяць (1 - 12) АБО jan,feb,mar,apr ... 
# |  |  |  |  .---- день тижня (0 - 6) (неділя=0 чи 7) АБО sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
  *  *  *  *  *  виконувана команда

Оператори[ред.ред. код]

Є кілька способів визначення кількох значень часу для однієї команди:

  • Кома (',') оператор визначає список значень, наприклад: 1,3,4,7,8
  • Тире ('-') оператор визначає діапазон значень, наприклад: 1-6, (теж саме що і 1,2,3,4,5,6)
  • Зірочка ('*') оператор визначає всі можливі значення. Наприклад, друга зірочка означає кожну годину.

Приклад[ред.ред. код]

Кожний день через одну хвилину після півночі видалити вміст файлу /www/apache/logs/error_log:

01 00 * * * cat /dev/null > /www/apache/logs/error_log

Змінні середовища[ред.ред. код]

Змінні середовища що впливають на роботу cron

  • HOME — шлях до домашньої директорії користувача.
  • LOGNAME — ім'я користувача для входу в систему.
  • PATH — шлях пошуку стандартних інструментів.
  • SHELL — шлях до оболонки командного інтерпретатора.
  • EDITOR i VISUAL — назва текстового редактора що використається для редагування crontab. За замовчуванням цим редактором буде Vi.
  • LANG, LC_ALL, LC_CTYPE, LC_MESSAGES змінні для інтернаціоналізації.

Приклад файлу crontab[ред.ред. код]

#Як звичайно, з символу # починаються коментарі
# Як командний інтерпретатор використовувати /bin/sh:
SHELL=/bin/sh
# Результати роботи надсилати на цю адресу
MAILTO=my@example.org
# Додати в PATH
PATH=$PATH:$HOME/bin
 
# # # # Тут починаються завдання
# Виконувати кожен день в 0 годин 5 хвилин, результат складати в log/daily:
5 0 * * * $HOME/bin/daily.job>> $HOME/log/daily 2> & 1
# Виконувати першого числа кожного місяця:
15 14 1 * * $HOME/bin/monthly
# Виконувати кожного робочого дня в 22:00:
0 22 * * 1-5 echo "Пора додому"
 
23 */2 * * * echo "Виконується в 0:23, 2:23, 4:23 і т. д."
5 4 * * sun echo "Виконується в 4:05 в неділю"
0 0 1 1 * echo "З новим роком!"
15 10,13 * * 1,4 echo "Цей напис виводиться в понеділок і четвер в 10:15 та 13:15"

Історія[ред.ред. код]

Ранні версії[ред.ред. код]

cron Unix Версії 7, був написаний Браєном Керніганом і був демоном (програмою-сервісом). Його алгоритм був простий:

  1. Читати crontab
  2. Якщо якась команда має поточну дату і час запускати її як root користувач.
  3. Спати протягом однієї хвилини
  4. Повторіть крок 1.

В університеті Пердью в кінці 1970-х років в експерименті для 100 користувачів система VAX з таким cron зазнала занадто велике навантаження.

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

  1. На початковому етапі або коли є зміни знайти crontab файли для всіх користувачів системи.
  2. Для кожного crontab визначити коли в майбутньому команда повинна бути виконана.
  3. Додати цю команду до списку команд за часом
  4. Основний цикл:
    1. Визначити коли в майбутньому команда з списку повинна бути запущена.
    2. Спати протягом цього часу.
    3. По пробудженню і після перевірки правильності часу, виконати команду з привілеями користувача, який володіє файлом crontab.
    4. Визначити коли в майбутньому команда з списку повинна бути запущена.

Сучасні версії[ред.ред. код]

Зараз існує декілька різних утиліт з функціональністю cron. Найпоширенішим з них є Vixie cron (створено 1987 року). Версія 3 Vixie cron була випущена в кінці 1993 року. З версії 4.1 в січні 2004 року вона була перейменована в ICS Cron. Версія 3 з деякими дрібними виправленнями використовується в більшості дистрибутивів Linux і системах BSD.

Інші популярні реалізації cron — anacron і fcron. anacron дозволяє виконати команду навіть якщо час для запуску було пропущено (наприклад, комп'ютер було вимкнено). anacron не є самостійною і вимагає наявності cron.

Посилання[ред.ред. код]