Cron

Небольшой манульчик по cron с примерами использования.

Демон crond запускается процессом инициализации init при загрузке системы. crond просыпается один раз в минуту, просматривает таблицы расписаний crontabs  и запускает указанные команды при совпадении текущего времени с временем указанным в расписании.

Запускать буду простой скриптик на bash, который при запуске записывает в конец файла crontest.log текущее время.

Как добавить cron задание?

Как занести задание на запуск скрипта в таблицу заданий crontab ? Запускается команда crontab с ключом -edit. Команда crontab -e проверяет копию .crontab файла вызвавшего её пользователя, открывает файл в текстовом редакторе (тот, что указан в переменной среды EDITOR), после изменений записывает файл в системный каталог.

Формат cron задания.

Все crontab-файлы имеют один формат. Если crontab вызывается пользователем впервые, то, скорее всего, отобразится стандартный файл (содержащий небольшую справку с командами), все поля в таком файле будут со знаком комментария #.  Любая строка, не начинающаяся со знака #, должна  содержать шесть полей и является одной командой:

Первые пять полей содержат информацию о времени запуска команды и отделяются друг от друга через пробел. В последнем поле содержится строка для передачи в sh, где пробелы выполняют роль аргументов.

Спецификация времени запуска команды в файле crontab.

Поля, содержащие сведения о времени запуска команды, могут состоять из одного значения или интервала значений (0-10 или sun-wed). также это может быть список отдельных значений/интервалов разделенный запятыми.

Каждое из эти полей может содержать

  • Символ *, который означает любую цифру
  • целое число (обозначающее конкретную минуту, час, день, месяц, день недели)
  • два числа разделённых дефисом, обозначает диапазон значений
  • целые числа, разделённые запятыми

Пример задания времени выполнения cron

Можно расшифровать таким образом: команда выполняется каждый 30 минут с 10 до 23 часов в любой день с февраля по декабрь в любой день недели (с понедельника по воскресенье).

Если cron не выполняет заданную команду, то ошибку следует искать либо во времени выполнения, либо ошибка в команде. Ошибку в команде отловить просто — достаточно запустить её из командной строки и посмотреть результат, далее — действовать по обстоятельствам (править пока не заработает). Если есть подозрение на ошибку во времени, то можно посмотреть лог.

 

Как просмотреть все cron задания?

Для просмотра всех заданий cron достаточно ввести

Просмотреть все задания для конкретного пользователя

 

Как удалить cron задание?

Удалить задание из cron можно двумя путями. Первый способ — это отредактировать файл с заданиями выполнив crontab -e

Второй способ позволяет убрать из очереди все задания:

Убрать все задания для конкретного пользователя

 

Как посмотреть лог выполнения cron ?

В Linux логи крона хранятся в системном журнале, который доступен по адресу

/var/log/syslog

Для просмотра строк, которые были отправлены в журнал cron’ом достаточно ввести

Если cron выполнялся много раз, то список будет внушительный 🙂

Как писать логи cron в отдельный файл?

Для того, чтобы syslog писал логи cron в отдельный файл нужно открыть

/etc/rsyslog.d/50-default.conf

открыть этот файл следует через команду sudo, например, так:

иначе (если работать в командной строке не через su) нельзя будет записать изменения.

Найти строку начинающуюся с

#cron.* -/var/log/cron.log

и убрать #, после этого сохранить файл.

Файл /var/log/cron.log — и будет местом хранения логов cron.

После этого файл нужно создать

Далее нужно перезапустить syslog

Теперь все логи cron будут записываться в отдельный файл

/var/log/cron.log

Как ограничить доступ пользователей к cron?

Для ограничения доступа к cron в директории /etc можно создать 2 файла (по-умолчанию они отсутствуют): cron.allow и cron.deny. Если файл /etc/cron.allow существует, то для доступа к команде crontab и cron любой пользователь (не являющийся суперпользователем root) , должен быть прописан в этом файле. Если такой файл не существует, но существует файл /etc/cron.deny, и любой пользователь указан в данном файле (не являющийся суперпользователем root), не сможет пользоваться crontab и cron. Если не существует ни того, ни другого файла, то только суперпользователь может пользоваться crontab и cron. Пустой файл /etc/cron.deny даёт возможность всем пользователям работать с cron и crontab.

Аналогичные файлы существуют для команды at — /etc/at.allow и /etc/at.deny.

Однократное выполнение задания в определённое время.

Бывает, что необходимо выполнить команду в определённое время, причём только один раз. Для этого существует утилита at.

Пример использования:

флаг -f — задаёт команды, которые выполнятся из файла

флаг -v — задаёт время выполнения

флаг -m — отправляет письмо пользователю, если у команды нет стандартного вывода

флаг -q — очерёдность, которая увеличивает значение nice для запускаемого процесса-задания

Время выполнения задания может быть задано следующим образом:

Как отобразить запланированные задания?

Сделать это можно с помощью следующим образом:

Удаление заданий

где последнее число — это номер задания