Cron

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

Cron - демон для автоматического запуска команд. Скрипты с командами могут находится находятся в:

  • /etc/cron.daily -- запускается ежедневно
  • /etc/cron.hourly -- ежечасно
  • /etc/cron.monthly -- ежемесячно
  • /etc/cron.weekly -- еженедельно
  • /etc/crontab -- системный

Пользовательские скрипты хранятся в:

  • /var/spool/cron/ -- crontab пользователей ОС

Для работы с расписаниями запуска скриптов используется команда crontab

  • crontab -e -- редактировать таблицу задач, будет использоваться редактор, указанный в переменной окружения EDITOR, если не хочется с ним связываться, то можно сформировать файл в любом редакторе и загрузить (см. ниже)
  • crontab -l -- показать таблицу задач
  • crontab -r -- удалить таблицу задач
  • crontab path/to/file.crontab -- загрузить таблицу задач из файла

Формат записей crontab:

 минута (0-59),
  |    час (0-23),
  |    |    день месяца (1-31),
  |    |    |    месяц в году (1-12),
  |    |    |    |    день недели (0-6, где 0=7=воскресенье).
  |    |    |    |    |    имя-пользователя  комманда

Пример задания, запускаемого от имени пользователя ivan в 2:10 каждую среду:

10 2 * * 3 ivan /path/to/script 

Если редактируется crontab пользователя (например командой 'crontab -e'), то имя пользователя указывать не надо. Пример: задача script будет выполнятся с параметрами -a -b каждый час в 15 минут с перенаправлением вывода в журнал:

15 * * * * /path/to/script -a -b > /tmp/cron-output.log

Вместо цифер можно использовать звёздочку (*), что озанчает любое из возможных значений, т.е. каждую минуту, каждый час и т.д. Можно определить другую периодичность, если после звёздочки указать косую черту и число, т.е.

  • */5 * * * * -- каждые 5 минут
  • * */2 * * * -- каждые 2 часа

Чтобы получать результаты работы crontab по почте (полезно при отладке) указываем в начале файла перед всеми задачами:

MAILTO=admin@mynetwork.ru

Если же не хотим получать ничего, то там же указываем:

MAILTO=/dev/null

Можно использоваться переменные

Переменная Значение Выполнение команды...
@reboot - при загрузке операционной системы
@yearly 0 0 1 1 * ежегодно в полночь 1-го января
@annually 0 0 1 1 * ежегодно в полночь 1-го января
@monthly 0 0 1 * * ежемесячно в полночь 1-го числа
@weekly 0 0 * * 0 в полночь каждое воскресенье
@daily 0 0 * * * ежедневно в полночь
@midnight 0 0 * * * ежедневно в полночь
@hourly 0 * * * * в начале каждого часа