Лекция
Сразу хочу сказать, что здесь никакой воды про демон cron, и только нужная информация. Для того чтобы лучше понимать что такое демон cron, crontab , настоятельно рекомендую прочитать все из категории Операционная система LINUX.
Демон cron (произносится “крон”) - это фоновый процесс который позволяет запускать на исполнение файлы в назначенное время. Если необходимо, чтобы с заданной периодичностью в системе запускался скрипт или программа, то это задача для cron. Сегодня мы рассмотрим как настраивать демон cron вручную, а также при помощи команды crontab.
Демон cron может запускать задачу не только для системы в целом, но и для отдельного пользователя. Файлы, которые описывают, что и когда будет запускаться для отдельного пользователя находятся в каталоге/var/spool/cron/crontabs/. Доступ к этому каталогу есть только у пользователя root.
Внутри каталога /var/spool/cron/crontabs/ для каждого пользователя создается текстовый файл по имени (логину) пользователя в котором и хранятся настройки. Например, если в системе есть пользователь test и он настраивал для себя cron, то будет создан файл с настройками - /var/spool/cron/crontabs/test. Пользовательtest прямого доступа к этому файлу не имеет. Как создается этот файл и редактируется мы поговорим позже (для этого используется команда crontab).
Для того, чтобы проверить запущен ли процесс cron выполните команду:
1
2 |
igor@adm-ubuntu:~$ ps ax | grep [c]ron
1026 ? Ss 0:00 cron |
Если демон не запущен запустить его можно как и любой другой демон командой /etc/init.d/cron start, выполненной от имени администратора.
Демон cron работает в поминутном режиме. То есть задать время выполнения того или иного задания можно с точностью до одной минуты. Основной конфигурационный файл демона cron - это /etc/crontab. Основная часть файла -это таблица в 7 столбцов, каждая строка, которой описывает одно задание. Файлы которые описывают задания для демона cron, также часто называют crontab-файлами.
Пример файла /etc/crontab:
1
2 3 4 5 |
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) |
Каждой строке задаются значения 7-ми полей:
m - minute - минута - на какой минуте выполнять задание; диапазон значений - (0-59)
h - hour - час - в котором часу выполнять задание; диапазон значений (0-23)
dom - day of month - день месяца - в какие дни месяца выполнять задание; диапазон значений (1-31)
mon - month - месяц - в какие месяцы года выполнять задание; диапазон значений (1-12)
dow - day of week - день недели - в какие дни недели выполнять задание; диапазон значений (0-7, 0 и 7 - это воскресенье, дальше по порядку)
user - имя пользователь - пользователь от имени которого будет выполнено задание
command - исполняемая команда - команда, которая будет запущена на выполнение в указанное время.
В первых пяти полях можно указывать не только число из диапазона, но и диапазон чисел, перечисление чисел, диапазон с шагом. Об этом говорит сайт https://intellect.icu . Символ * - означает любое значение. Подробно почитать о значениях можно в man 5 crontab. Мы же рассмотрим несколько примеров.
10 6 * * * root myscript - запускать команду myscript каждый день, в 6 часов 10 минут утра.
0 5 1 * * root myscript - запускать команду myscript первого числа каждого месяца в 5 часов утра.
30 23 * * 1-5 root myscript - запускать команду myscript в рабочие дни (кроме субботы и воскресенья) в 23 часа 30 минут.
0 23 1,3,7,15 1,7 * root myscript - запустить команду myscript 1,3,7,15-го числа, месяца января и июля в 23 часа.
30 0-23/3 * * * root myscript - запускать команду каждые три часа. То есть первый запуск будет в 0:30, затем в 3:30 и т.д.
*/5 * * * * root myscript - запускать команду каждые 5 минут (*/5 - без пробелов).
Будьте внимательны с полями 3 и 5 - день месяца и день недели. Если числа есть в обеих полях, например, * 6 5 * 1 root myscript, то запись означает запускать задание в шесть часов 5-го числа каждого месяца или каждый понедельник, но не каждый понедельник 5-го числа.
crontab-файлы также могут содержаться в каталоге /etc/cron.d/, который просматривается демоном cron в процессе работы. Они могут иметь произвольные имена, но структура должна быть такая же как и у файла/etc/crontab. Обычно в этом каталоге хранятся задания различных служб и программ (файлы тогда называются по именам служб или программ).
Обычные пользователи также могут создавать свои crontab-файлы и редактировать их, если обратное не запрещено администратором. Для редактирования crontab-файлов предназначена команда crontab. Зарегистрируйтесь в системе под учетной записью обычного пользователя (например test) и наберите командуcrontab -e. Вы попадете в редактор (текстовый редактор по умолчанию в вашей системе) в котором нужно будет набрать задание. Обратите внимание, что в пользовательский crontab-файлах отсутствует поле user, так как оно вычисляется демоном cron из названия самого файла, который будет после редактирования сохранен в каталоге/var/spool/cron/crontabs/ под именем test. Наберите в нем строку с заданием, например:
29 12 * * * touch testfile
В первом втором поле укажите актуальное для вас время (на несколько минут больше текущего) и сохраните файл. Затем проверьте после назначенного времени, корневую директорию пользователя test и убедитесь, что файл был создан:
1
2 |
test@adm-ubuntu:~$ ls -l [0-9]*
-rw-r--r-- 1 test test 0 2010-01-11 12:16 testfile |
Как видите файл testfile был создан. Также из под учетной записи администратора можете проверить, что был создан и файл /var/spool/cron/crontabs/test:
1
2 |
igor@adm-ubuntu:/etc/cron.d$ sudo ls -l /var/spool/cron/crontabs/
-rw------- 1 test crontab 266 2010-01-11 12:13 test |
Если необходимо запретить пользователю создавать и редактировать crontab-файлы сделать это можно записав, имя его учетной записи в файл /etc/cron.deny. Если файла нет, то его нужно создать самому. Имена учетных записей записываются по одному в строке. Можно также использовать файл /etc/cron.allow. Подробнее описано в man crontab.
Иногда бывают моменты, когда нужно задать своеобразное время выполнения скрипта (например, только при загрузке). Для этого на помощь приходят зарезервированные слова:
Строка Значение
------ -------
@reboot Запуск при загрузке
@yearly Запуск каждый год, "0 0 1 1 *".
@annually (тоже самое, что @yearly)
@monthly Запуск раз в месяц, "0 0 1 * *".
@weekly Запуск раз в неделю, "0 0 * * 0".
@daily Запуск раз в день, "0 0 * * *".
@midnight (тоже самое, что @daily)
@hourly Запуск раз в час, "0 * * * *".
Пример
@reboot root /usr/local/etc/rc.d/starts
Примечание.
Они работают в Linux/FreeBSD, но не работают в Solaris
Пожалуйста, пиши комментарии, если ты обнаружил что-то неправильное или если ты желаешь поделиться дополнительной информацией про демон cron Надеюсь, что теперь ты понял что такое демон cron, crontab и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX
Из статьи мы узнали кратко, но содержательно про демон cron
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX