Демон cron может запускать задачу не только для системы в целом, но и для отдельного пользователя. Файлы, которые описывают, что и когда будет запускаться для отдельного пользователя находятся в каталоге /var/spool/cron/crontabs/. Доступ к этому каталогу есть только у пользователя root.
Внутри каталога /var/spool/cron/crontabs/ для каждого пользователя создается текстовый файл по имени (логину) пользователя в котором и хранятся настройки. Например, если в системе есть пользователь test и он настраивал для себя cron, то будет создан файл с настройками - /var/spool/cron/crontabs/test. Пользователь test прямого доступа к этому файлу не имеет. Для редактирования этого файла используется команда crontab.
Для того, чтобы проверить, запущен ли процесс cron, выполните команду:
ps ax | grep [c]ron
1026 ? Ss 0:00 cron
Если демон не запущен запустить его можно как и любой другой демон командой /etc/init.d/cron start, выполненной от имени администратора.
Cron работает в поминутном режиме. То есть задать время выполнения того или иного задания можно с точностью до одной минуты. Основной конфигурационный файл демона cron - это /etc/crontab. Основная часть файла - это таблица в 7 столбцов, каждая строка, которой описывает одно задание. Файлы, которые описывают задания дляcron, также часто называют crontab-файлами.
Пример файла /etc/crontab:
# 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 - исполняемая команда - команда, которая будет запущена на выполнение в указанное время.
В первых пяти полях можно указывать не только число из диапазона, но и диапазон чисел, перечисление чисел, диапазон с шагом. Символ * - означает любое значение. Подробно почитать о значениях можно в man 5 crontab. Рассмотрим несколько примеров.
Запускать команду myscript каждый день, в 6 часов 10 минут утра:
10 6 * * * root myscript
Запускать команду myscript первого числа каждого месяца в 5 часов утра:
0 5 1 * * root myscript
Запускать команду myscript в рабочие дни (кроме субботы и воскресенья) в 23 часа 30 минут:
30 23 * * 1-5 root myscript
Запустить команду myscript 1,3,7,15-го числа, месяца января и июля в 23 часа:
0 23 1,3,7,15 1,7 * root myscript
Запускать команду каждые три часа. То есть первый запуск будет в 0:30, затем в 3:30 и т.д:
30 0-23/3 * * * root myscript
Запускать команду каждые 5 минут (*/5 - без пробелов):
*/5 * * * * root myscript
Будьте внимательны с полями 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 и убедитесь, что файл был создан:
ls -l [0-9]* -rw-r--r-- 1 test test 0 2010-01-11 12:16 testfile
Как видите файл testfile был создан. Также из под учетной записи администратора можете проверить, что был создан и файл /var/spool/cron/crontabs/test:
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.