linux-notes.org
Cron — это демон, который запускает задачи по указанному (заданному) времени и который работает в наиболее распространенных дистрибутивах Unix / Linux. Поскольку cronjobs основаны на времени, иногда необходимо проверить и убедиться, что задание выполнялось в запланированное время. Иногда люди настраивают cron чтобы они отправляли вывод скрипта через системную почту или перенаправляюте вывод в файл; однако не все кроны настроены одинаково, и мние из них, могут быть настроены на отправку вывода в /dev/null, и тем самым, препятствуя любой возможности проверить выполняемое задание.
Первое что стоит проверить — это наличие ПИДа по крону:
crond, если он не настроен иначе, будет отправлять сообщение журнала в syslog каждый раз, когда он вызывает запланированное задание. Самый простой способ проверить работу cron на попытку срабатываания задание, — это проверить лог-файл.
В зависимости от Unix/Linux ОС, данный файл может иметь другое название.
Если у вас, CentOS/Fedora/RedHat, то просмотреть нужно:
Можно отсеять ненужное и поискать только необходимую крон-джобу, например:
Собственно, все наглядно видно.
Если у вас, Ubuntu/Debian, то просмотреть нужно:
Иногда, системные администраторы меняют вывод крона и для того, чтобы проверить куда пишуться логи по cron-job-ам, выполните:
С вывода видно, что у меня используется стандартный файл.
Так же, стоит проверить как настраивали крон-джобы:
Возможно было перенаправление вывода в какой-то файл для дальнейшего анализа.
Стоит отметить, то — что некоторые кроны лежат тут:
Бывает некоторые задачи запихивают туда.
Чтобы запретить или разрешить добавление крон-задат, нужно прописать юзера в:
Так же, можно восспользоватся следующими командами для проверки статуса, запуска/остановки/перезапуска службы:
Это все действия были для Linux, но сейчас приведу пример и для mac os x.
Недавно мне пришлось отлаживать работу Cron и проверять, действительно ли она выполняется по заданному расписанию. Я начал искать и проверять все логи и… нашел вроде бы подходящий файл для этого:
Но в нем не было признаков логирования крона!
Включить logging для Cron в Mac OSX
Для перезапуска syslog-а, выполняем:
Проверяем что получилось!
А для помощи, можно вызвать:
А на этом, у меня все, статья «Проверка работы cron в Unix/Linux» завершена.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Источник
Как посмотреть CRON задания
Для каждого пользователя посмотреть список заданий, выполняемых по расписанию можно выполнив crontab -l
*/5 * * * * /opt/script.sh
Здесь и далее из вывода убираются все комментарии при помощи grep
Проделать это можно также для пользователей, для которых оболочки по умолчанию не установлено и авторизация не предполагается — например, для www-data
root@site:/etc/cron.d# su — www-data -s /bin/bash
no crontab for www-data
Автоматизация добавления CRON заданий
Кроме crontab пользователей есть возможность размещать скрипты в директории /etc/cron.d, они также будут выполняться
atop certbot php
Отличие при работе с /etc/cron.d только в том, что в задании указывается дополнительно имя пользователя, в примере это root
09,39 * * * * root [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
Также можно посмотреть скрипт для atop, интервал записи логов утилитой можно поменять не только в конфигурационном файле, но и прямо в crontab задании
Обязательна пуская строка после списка заданий каждого CRONTAB. Без нее установить расписание не удастся.
Скрипты в /etc/cron.d удобны тем, что позволяют автоматизировать работу. Какой-то сценарий может добавлять задания для определенных пользователей или перезаписывать их без участия администратора
Обязательны указание времени выполнения, имя пользователя, само задание и пробел в конце.
Про отладку CRON если задания не выполняются.
Источник
Настройка Cron
Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с 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 для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
Источник
Проверьте, работает ли crontab
Это означает, что ваш процессор поддерживает как 32-битные, так и 64-разрядные команды.
6 ответов
Не перенаправлять вывод ошибки в / dev / null и grep / var / log / syslog для выхода cron.
Вы можете сразу показать ошибки при сохранении файла после редактирования /etc/crontab или файлы внутри /etc/cron.d/ с:
Если редактирование в порядке, вы увидите уведомление RELOAD, будут возникать ошибки, такие как
Хотя очень редко, иногда cron перестает нормально работать, даже если служба работает. Вот как проверить, работает ли ковер и остановить / запустить службу.
Вы можете увидеть ваш активный cron с помощью команды терминала:
Ниже приведены параметры:
мин (0 — 59) час (0 — 23) день месяца (1 — 31) месяц (1 — 12) день недели (0 — 6) (воскресенье = 0) команда
Итак, вы вызываете свой скрипт каждую первую минуту каждого часа. Вы должны тестировать свой результат чаще всего для целей тестирования:
Это будет вызывать его каждую минуту!
Для временной части на каждой строке вы можете использовать этот тестер cron для проверки / проверки вашего определения времени cron.
получил ответ сам, я проверил и не нашел crond внутри каталога установки по умолчанию, то есть /etc/init.d/
теперь попытается ответить. [ ! d2]
note — Я также проверил cron.allow, cron.deny. Пока все хорошо.
Я считаю, что вы также можете использовать run-parts для запуска заданий cron вне диапазона. Фактически это то, что cron использует для запуска периодических заданий cron, поэтому, предоставляя соответствующие аргументы, вы можете запускать их в любое время.
Если вы просто хотите запустить один файл вместо всех заданий cron, определенных например, /etc/cron.daily вам нужно будет предоставить аргумент regex вместе с действительным регулярным выражением. run-parts —list —regex ‘^p.*d$’ /etc
Имейте в виду, что задания cron обычно называются без расширения и помечены как исполняемые, поэтому убедитесь, что ваши сценарии похожи, но использование регулярного выражения может позволить вам запускать скрипт с расширением.
Источник