cron — утиліта в операційних системах Unix і Linux, яка дозволяє користувачам виконувати команди або скрипти (групи команд) автоматично в заданий час. Назва cron походить від грецького слова χρόνος (chronos), що означає «час», помилково записаного як cron Кеном Томпсоном.
Файл завдань crontab Кожен користувач системи має свій завдань crontab (за даними деяких джерел, назва файлу походить від cron table), в якому описано, в який час і які команди і програми запускати від імені цього користувача.
Параметри запуску crontab
Для редагування файлу crontab використовується спеціальна однойменна команда crontab, яка дозволяє не переривати процес cron на час редагування: -е — команда запускання файлу crontab для його редагування. () -l — команда запускання файлу щоб продивитися його зміст. () -r — видалити crontab файл для цього користувача (видалити свій crontab) . ()
Таблиця 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) Зірочка ('*') оператор визначає всі можливі значення. Наприклад, друга зірочка означає кожну годину. Слеш ('/') оператор визначає крок значень, наприклад: */6, (теж саме що 0,6,12,18,24....)
Нестандартні макроси Деякі реалізації cron підтримують наступні нестандартні макроси:
МакросОписЕквівалент@yearly (або @annually)Виконання щороку опівночі 1 січня0 0 1 1 *@monthlyВиконання щомісяця опівночі першого числа0 0 1 * * @weeklyВиконання щотижня опівночі (у неділю)0 0 * * 0 @daily (або @midnight)Виконання кожної доби опівночі0 0 * * *@hourlyВиконання щогодини (на початку години)0 * * * *@rebootВиконання під час запуску демонаN/A
@reboot обумовлює виконання під час запуску демона. Оскільки перезапуск самого cron є нетиповим випадком, фактично виконання відбувається під час запуску оперційної системи, тобто простий перезапуск демону не призводить до виконання завдань, визначених у @reboot. Така поведінка притаманна деяким реалізаціям cron, наприклад у Debian.
@reboot може використовуватись у випадку необхідності запуску завдання від користувача, якщо цей користувач не може змінити конфігурацію init для запуску відповідних програм.
Приклад Щодня через одну хвилину після опівночі видалити вміст файлу /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 # Результати роботи надсилати на цю адресу [email protected] # Додати в 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"
Історія Ранні версії В Unix Версії 7 cron був написаний Браяном Керніганом і був демоном (програмою-сервісом). Він працював за простим алгоритмом: Прочитати crontab Якщо якась команда має поточну дату і час запускати її як root користувач. Чекати хвилину Повторити крок 1.
В університеті Пердью в кінці 1970-х років в експерименті для 100 користувачів система VAX з таким алгоритмом зазнала занадто велике навантаження.
Наступні версії cron були створені з метою розширити можливості для системи Unix, яка має багатьох користувачів. Алгоритм, який використовується в цих cron, виглядає таким чином:
На початковому етапі або коли є зміни знайти crontab файли для всіх користувачів системи. Для кожного crontab визначити коли в майбутньому команда повинна бути виконана. Додати цю команду до списку команд за часом Основний цикл: Визначити коли в майбутньому команда з списку повинна бути запущена. Спати протягом цього часу. По пробудженню і після перевірки правильності часу, виконати команду з привілеями користувача, який володіє файлом crontab. Визначити коли в майбутньому команда з списку повинна бути запущена.
Сучасні версії Зараз існує декілька різних утиліт з функціональністю cron. Найпоширенішим з них є Vixie cron (створено 1987 року). Версія 3 Vixie cron була випущена в кінці 1993 року. З версії 4.1 в січні 2004 року вона була перейменована в ICS Cron. Версія 3 з деякими дрібними виправленнями використовується в більшості дистрибутивів Linux і системах BSD.
Інші популярні реалізації cron — anacron і fcron. anacron дозволяє виконати команду навіть якщо час для запуску було пропущено (наприклад, комп'ютер було вимкнено). anacron не є самостійною і вимагає наявності cron.
Зноски
Посилання Розумний крон — сервіс розпізнає український текст і перетворює його у час виконання у форматі cron Open Group's crontab specification — official UNIX 03 ISC Cron 4.1 CVSweb for FreeBSD's cron — Vixie cron 3.0 ACM Digital library — Franta, Maly, «An efficient data structure for the simulation event set» (requires ACM pubs subscription) Cron Sandbox at HxPI пропонує інтерактивне отримання часу виконання команди crontab.