Посмотреть логи crontab centos

Обновлено: 03.07.2024

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

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

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

echo "Current time is: $(date +%T)" >> / home / user123 / crontest . log

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

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

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

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

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

день _ недели - день недели , диапазон 0 - 6 ( 0 соответствует воскресенью ) . Также может задаваться в символьном виде , например : sun , mon , tue и т . д .

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

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

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

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

0 , 30 10 - 23 * 2 - 12 0 - 6 / home / user123 / newcron . sh

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

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

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

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

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

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

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

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

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

/var/log/syslog

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

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

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

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

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

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

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

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

Далее нужно перезапустить 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.

date

21.04.2020

directory

CentOS, Linux

comments

Комментариев пока нет

Cron — это планировщик задач, работающий в Unix-подобных операционных системах, включая все дистрибутивы Linux. Демон cron работает на сервере в фоновом режиме и запускает по расписанию запланированные задачи. В этой статье мы рассмотрим установку cron на сервер с Linux CentOS 8, познакомимся с синтаксисом cron, научимся добавлять в него различные задачи, управлять расписанием запуска.

Установка cron в Linux

По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:

В моем случае cron уже был установлен:

установка crontab в linux centos

После установки, демон crond нужно добавить в автозагрузку и запустить:

Crontab: добавление задания в планировщик cron

Для добавления задач в cron можно использовать команду:

Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это vi, но можно изменить на удобный для вас, например nano). Настройка заданий таким способом исключает, что вы допустите ошибку в синтаксисе. Редактор crontab просто не даст сохранить файл с ошибками.

Также можно отредактировать файл заданий cron вручную через mc:

Чтобы добавить простое задание по запуск bash скрипта в cron, выполните:

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

Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).

Если все сделали верно, ваше задание будет добавлено. Чтобы вывести список заданий cron, выполните:

Данный скрипт будет запускаться через cron ежеминутно.

Минимальное время – 1 минута. Демон cron просматривает список заданий один раз в минуту. Просматриваются следующие файлы и каталог:

Каждая запись расписания crontab состоит из 5 полей:

cron синтаксис команды, настройка расписания

Можно использовать следующие допустимые значения для каждого из полей:

ПолеДиапазон значений
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12 или jan feb mar apr may jun jul aug sep oct nov dec
день недели 0-6 (где 0 это воскресение) или sun mon tue wed thu fri sat

Знак * означает все допустимые значения. Пример задания:

Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:

Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:

Или исползовать более короткий синтаксис с запятой:

Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:

* */2 * * *
Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:

Еще несколько примеров расписаний для cron:

  • запуск по будням в 12:00 и 18:00: 0 12,18 * * 1-5
  • каждые 30 минут: */30 * * * *
  • каждую субботу: 0 0 * * 6
  • каждый вторник и четверг в 2:00 ночи: 0 2 * * 2,4

Еще в cron можно использовать специальные переменные.

Т.е. для запуска задания раз в день можно использовать формат:

@daily echo "Проверка cron"

Можно отредактировать cron файл другого пользователя:

Отправка уведомлений cron на e-mail

Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.

Для отправки почты на сервере дожен быть установлен почтовый-агент. Для теста, я установил на сервер sendmail:

sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.

Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:

cron - почтовые уведомления email, mailto

После каждого запуска задачи на указанный email отправляется уведомление:

письмо о задании отправлено через crontab

Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:

* * * * * echo "Проверка cron" >> /var/log/admin/journal.log

Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:

* * * * * echo "Проверка cron" >> /dev/null 2>&1

Таким образом вы можете отделить некоторые задания, чтобы не отправлять уведомления о всех задания себе на почтовый ящик.

Файлы конфигурации и логи планировщика cron

  • /etc/cron.daily – запуск скриптов один раз в день
  • /etc/cron.hourly – запуск скриптов ежечасно
  • /etc/cron.monthly – запуск скриптов раз в месяц
  • /etc/cron.weekly – запуск скриптов раз в неделю

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

Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.

В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.

Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:

vesta / centos 7, 1 пользователь
впечатления что добавленные через весту задания крон не отрабатываются.

в линуксе не селен, гугл помошник, вижу вот - тут нет команд.

подскажите как посмотреть какие команды в задания крон записаны в системе, и как бы посмотреть их логи (запускаются или нет). На деле процесс не выполняется скриптами, но вот не знаю крон не запускает или глюк скриптов.

Как то можно проверить скрипт если из консоли выполнить задание крон, какой командой это можно сделать? про это не чего найти не могу.

  • Вопрос задан более трёх лет назад
  • 504 просмотра
Логи на почту приходят. Плюс запись вывода, если направлено не в dev/null.
Письма ищите в спаме.

raebg

не чего не приходит видимо это настривать надо..
вообщем не чего нет да и на рабочих системах где все работало - не когда не чего не приходило. Евгений Матвеев: так это веста. Там при создании задания можно почту указать вроде, либо приходит на почту указанную в профиле.
Но письма в спаме, это 100%

denistu10

В rsyslog.conf проверьте включены ли запись логов cron
Если включено должна быть такая строчка:

Если нет то допишите ее
А далее смотрите логи /var/log/cron

raebg

-bash: /etc/rsyslog.conf: Permission denied
я одно тока понимаю что у меня что то не так, а что не понимаю.
тут нет прав доступа? как включить права?
Может кто может глянуть за 100 ку рублей в кроне нет проблема..

denistu10

Евгений Матвеев: su - root
А далее пароль от вашего рута и например
nano /etc/rsyslog.conf

raebg

да нашел проблему поди не пригодятся логи.
так вроде стабильно должно работать. но на заметку это все возьму.
проблема в строках были, видимо веста при генерации периодов сама добавила лишнее в троку:

*/20 autoupdate index.php reports autoupdate index.php reports autoupdate index.php reports autoupdate index.php reports

raebg

f6b9995c5c9f4074a20d0986a520cdce.JPG

тут может я еще не правильно внес?
строку сгенерировал мне скрипт которую надо внести.
характеристики сгенерировал еще плюсом в весте.
может эти 0 в строку вписывать не нужны?

ДА ПРОБЛЕМА В СТРОКАХ..
всем спасибочки большое..
Веста сама генерировала часть ненужных данных.. типа апдейт в верху репортс там и т.п. удалил все заработалооо.

Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.

Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.

Как работает Cron?

Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

  • /etc/cron.minutely - каждую минуту;
  • /etc/cron.hourly - каждый час;
  • /etc/cron.daily - каждый день;
  • /etc/cron.weekly - каждую неделю;
  • /etc/cron.monthly - каждый месяц.

В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.

Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.

Синтаксис crontab

Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:

минута час день месяц день_недели /путь/к/исполняемому/файлу

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа '*'. Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:

Далее, усложним, будем запускать каждый час, в нулевую минуту:

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

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

0 0 1 * * /usr/local/bin/serve

Можно в любой день, например, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

30 15 * * 2 /usr/local/bin/serve

Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:

30 15 * * sun /usr/local/bin/serve

Для того чтобы указать определенный интервал нужно использовать символ "-", например, каждый час, с семи утра до семи вечера:

0 7-19 * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель ",". Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16 * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":

Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:

  • @reboot - при загрузке, только один раз;
  • @yearly, @annually - раз год;
  • @monthly - раз в месяц;
  • @weekly - раз в неделю;
  • @daily, @midnight - каждый день;
  • @hourly - каждый час.

Например, вот так просто будет выглядеть команда запуска скрипта раз в час:

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

sudo vi /etc/corn.daily/basckup

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

grep CRON /var/log/syslog

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

sudo run-paths /etc/cron.daily/

Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.

Выводы

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

Читайте также: