Linux как проверить cron

Обновлено: 04.07.2024

Это означает, что ваш процессор поддерживает как 32-битные, так и 64-разрядные команды.

Не перенаправлять вывод ошибки в / dev / null и grep / var / log / syslog для выхода cron.

Вы можете сразу показать ошибки при сохранении файла после редактирования /etc/crontab или файлы внутри /etc/cron.d/ с:

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

Хотя очень редко, иногда cron перестает нормально работать, даже если служба работает. Вот как проверить, работает ли ковер и остановить / запустить службу.

Просто примечание . для Ubuntu это cron, а не crond – Amit Kohli 10 August 2017 в 20:52

Вы можете увидеть ваш активный 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 обычно называются без расширения и помечены как исполняемые, поэтому убедитесь, что ваши сценарии похожи, но использование регулярного выражения может позволить вам запускать скрипт с расширением.


Его надо использовать вместо cron. Там всегда понятно, работает или нет, и если нет, то почему.


slowpony ★★★ ( 28.10.19 11:36:27 )
Последнее исправление: slowpony 28.10.19 11:36:43 (всего исправлений: 1)

1. Где ты ожидаешь найти test1.txt? Задай полный путь.

2. К вопросу не особо относится, но ты уверен, что запускать питоноскрипт каждую секунду — хорошая идея?

Каждую минуту. Большинство вариантов cron не в курсе о секундах.


Его надо использовать вместо cron. Там всегда понятно, работает или нет, и если нет, то почему.

Это что еще за дрянь?

Это нормально сделанный cron.


/home/op/pycron/test1.py Куда еще полнее? Ну вроде ежеминутно должно.


Какая реализация крона?

Разрешено ли пользователям (не руту) пользоваться кроном?


Хз, но я делал sudo chmod a+x /home/op/pycron/test1.py

Действительно куда? Может хотя бы > /tmp/test1.txt


Ну раз ты ничего не знаешь, то я ничем помочь тебе не могу.

Это не имеет никакого отношения к cron.


Похоже проблема была действительно в этом, сделал джоб так

Как проверить что джобы с крона запускаются?

В логах должны быть записи о запуске той или иной команды. См. /var/log/cron, /var/log/syslog, /var/log/messages.


Может так выловишь результат?


Уже заработало, всем большое спасибо.


1. Нужно смотреть логи syslog/messages,/var/log/cron.log если у вас старые ОС, и systemctl|grep -i cron для поиска сервиса cron, и journalctl -u cronie.service - что-бы понять, запускалось ли задание или нет.

2. Если проблема не в запуске задания, а в выполнении команды, осуществляем запуск самой команды в консоли, что-бы понять выполняется ли она, если да то с ошибками ли, и что делать с ошибками. Если это bash-скрипт, лучше запускать его в режиме отладки, так

Где первая и последняя команды активируют отладку, и отключают её, соответственно.

lucentcode ★★★★★ ( 28.10.19 16:20:44 )
Последнее исправление: lucentcode 28.10.19 16:30:26 (всего исправлений: 1)


Писать в своём скрипте свои логи?


Уже начал так делать, скрипт выполняет запрос к эластику и дропает старые документы по фильтру.

скрипт выполняет запрос к эластику и дропает старые документы по фильтру

Да какая разница, чо он там делает:


Если вы уже имеете некоторый опыт системного администрирования Linux, то должны знать, что такое cron и для чего он предназначен. Если же вы только начинаете работать с Linux, то эти знания вам пригодятся. Даже если вы уже изучали использование cron, данная статья поможет вам освежить знания.
Название cron происходит от Cronos, древнегреческого олицетворения времени. И это правильно выбранное имя, так как основным предназначением cron является помощь в планировании различных задач, которые система должна выполнить в заданное время. Если вы пользовались Windows, то вероятно вам приходилось копаться в утилите Scheduled Tasks. В целом назначение у программ аналогичное, но реализация разная. Cron предназначен для серьезных задач системного администрирования и обладает большей гибкостью. В качестве примера реальной задачи можно привести резервное копирование. Понравится ли вам вручную выполнять резервное копирование данных на нескольких сотнях машин? Думаю, нет. Вы просто пишете простой скрипт с использованием rsync, планируете его выполнение, например ежедневно, и забываете об этом. Все, что необходимо в дальнейшем - время от времени проверять логи. Некоторые даже используют cron для напоминания о важных личных событиях, например о днях рождения. Но cron - это просто демон, запускающий указанные вами задания. А имеется ли утилита, помогающая редактировать/добавлять/удалять эти задачи? Конечно имеется, и называется она crontab (от cron table). Однако будем двигаться вперед последовательно и начнем с инсталляции.

2. Инсталляция cron

Большинство дистрибутивов используют Vixie Cron и некоторые другие производные как дефолтную реализацию cron, и именно их мы будем рассматривать в этой статье. Кроме того, практически во всех дистрибутивах cron уже предустановлен, так как он является очень важной частью системы Linux. Хотя обычный пользователь, как правило, никогда не работает с ним напрямую, система и многие приложения используют cron (хорошим примером является периодическое обновление базы данных man-страниц). Значимым исключением является Gentoo, где необходимо вручную установить vixie-cron и добавить его в runlevel по умолчанию. В Arch, Debian, Slackware, Ubuntu, Fedora и OpenSUSE cron установлен по умолчанию и автоматически запускается при загрузке системы. Мы надеемся, что вы изучите man-страницы cron и crontab, так как во многих дистрибутивах используются их пропатченные версии, что делается для лучшей интеграции программы под конкретный дистрибутив. Поэтому существует вероятность, что функция, которая имеется например в Gentoo, будет недоступна в Slackware. В любом случае, нет ничего лучше чтения man-страниц, особенно если имеешь дело с новой программой, которую собираешься достаточно часто использовать.

3. Использование cron

Во-первых, мы должны убедиться, что cron запущен:

Если в выводе ничего не будет, проверьте, запущен ли cron, и добавьте его в службы, запускаемые по умолчанию, чтобы он стартовал при следующей загрузке. Как это сделать, зависит от дистрибутива. В системах Debian команда должна вывести примерно следующее:

Теперь заставим cron работать. Сначала необходимо подумать о том, какую команду мы будем использовать. Требует ли она привилегий root? Предположим, мы будем использовать crontab, чтобы добавить простой скрипт на выполнение через каждые пять минут как простой пользователь.

3.1. Crontab

3.1.1. Пример

Напишем простой скрипт, который будет выводить обычное диалоговое окно на базе curses в терминале (требуется dialog и любой эмулятор терминала - мы используем xterm):

Назовем файл crontest.sh и сделаем его исполняемым, так как все, что запускается с помощью cron, должно быть исполняемым:

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

Нам необходимо экспортировать переменную DISPLAY, чтобы xterm не выдавал ошибки вида "DISPLAY is not set". Теперь посмотрим назначение каждого поля.

3.1.2. Поля crontab

Если вы работали ранее с символами для подстановки, то вам не составит труда освоить использование звездочки в crontab: она означает, что вместо нее подставляются все возможные значения поля. Поля по умолчанию в Linux (будьте внимательны, некоторые Unix-системы используют другие реализации cron) обозначают, слева направо: минуту, час, день месяца, месяц, день недели, год (необязательно) и исполняемую команду. Таким образом, если мы хотим, чтобы наш скрипт запускался каждые пять минут, каждый час, каждый день, каждый месяц и каждый год, наша запись должна выглядеть так:

Мы призываем вас быть осторожнее с полем дня недели: в вашей стране первым днем недели может быть понедельник, а в других странах им может быть воскресенье. Если работаешь в мультикультурной, многонациональной среде, необходимо помнить о культурных и религиозных особенностях. Cron отправляет уведомления пользователю, которому принадлежит запись, на его почтовый адрес по умолчанию ($user@$hostname). Если вы хотите изменить адрес электронной почты, просто добавьте "MAILTO=$email_address" в crontab. Если вы хотите отключить эту функцию, добавьте ">/dev/null 2>&1" в конец записи.
Теперь, если вы уже устали от всплывающего каждые пять минут окна, снова запустите crontab -e, чтобы удалить или, что проще, закомментировать запись. Чтобы просмотреть содержимое crontab, просто используйте опцию -l (list).

3.2. Взгляд на /etc/

3.2.1. Скрипты cron

В предыдущих разделах мы решали простые и тривиальные задачи, просто для разминки, а теперь мы уже займемся серьезными делами. Заголовок данного раздела относится к директориям в /etc, которые отвечают за периодические задачи по обслуживанию системы. Например, в директории /etc/cron.weekly имеется скрипт man-db, который обновляет базу данных man-страниц. Все подобные скрипты включены в состав дистрибутива и запускаются согласно файлу /etc/crontab. Поэтому, если вы хотите разобраться их работе, лучше всего изучить содержимое этого файла. Вы увидите записи, похожие на те, что мы делали ранее, но исполняемые команды будут отличаться. "run-parts" - это небольшая утилита, созданная для запуска всех скриптов в заданном каталоге.
Внимательный читатель может заметить, что в /etc/crontab имеется одно поле, которого мы не видели при редактировании своего crontab - это поле "user". Это сделано по соображениям безопасности. Если вы вводите команду crontab -e как $user, это значит, что любая команда запускается от имени $user. Но так как /etc/crontab относится ко всей системе, необходимо явно задавать пользователя, так как может потребоваться запускать определенные скрипты или программы от имени другого пользователя, а не от root, особенно если системный администратор заботится о безопасности и добавляет пользователей и группы в систему по мере необходимости. Пример: для резервного копирования не нужны все привилегии root, требуются только права на чтение и запись в определенные директории, поэтому администратор создает группу backup и пользователя backupadmin с необходимыми правами и запускает ночные скрипты резервного копирования с помощью записи:

Эта запись запускает скрипт nightlybkup.sh каждую ночь в 23:30. Если мы захотим запускать резервное копирование только с понедельника по пятницу, нужно отредактировать нашу запись:

Если вы захотите запускать резервное копирование только по понедельникам, средам и пятницам, замените "1-5" на "1,3,5". Когда вы точно знаете, что вам нужно, cron становится понятным и простым в использовании.

4. Размышления о безопасности

Существует множество ситуаций, когда вы не хотите, чтобы пользователь, имеющий доступ к вашей системе, имел возможность создавать записи crontab. Здесь в игру вступают файлы /etc/cron.deny и /etc/cron.allow. Их использование аналогично /etc/hosts.allow и /etc/hosts/deny, поэтому, если вы работали с этими файлами раньше, то будете чувствовать себя как дома. Этих двух файлов (cron.deny и cron.allow) по умолчанию нет в системе, по крайней мере на системе, в которой мы работаем, поэтому по умолчанию всем разрешено создавать записи в crontab. Вы можете проверить, какие файлы, относящиеся к cron имеются в вашем каталоге /etc с помощью команды:

И снова напоминаем, что все сказанное справедливо для Linux, так как отсутствие этих файлов на Solaris означает прямо противоположное, кроме того, файлы расположены в других местах. Сначала проверяется cron.allow, поэтому обычно мы вводим "ALL" в cron.deny, а затем добавляем пользователей, которым мы хотим предоставить доступ, в cron.allow.

5. Примеры использования cron

Каждую минуту:

Команда будет выполняться каждую минуту, день и месяц.

Эта команда будет запускать скрипт checkdrive.sh в 02:30 каждое 10 число января, июня и декабря.

Каждые полчаса:

Только по выходным:

Дважды в день:

Команда будет выполняться каждый день в 11:20 и 16:20.

Каждый час в один конкретный день:

Команда будет запускаться каждый час каждое 2-е мая.

Каждые 10 минут во время пяти рабочих дней (понедельник - пятница):

Только в рабочее время:

Эта команда будет выполняться один раз в день с 9 до 17 часов.

Один раз в году, в полночь 1-го января:

Дважды в год в 12:00 и в 24:00

Эта команда будет исполняться дважды в год (каждые 6 месяцев) в 12:00 и в 24:00.

Каждый третий четверг любого заданного месяца в 10:00:

Каждый день через 20 минут после каждого четного часа:

Эта команда будет выполняться каждый день через 20 минут после каждого четного часа (0:20, 2:20. 22:20).

6. Заключение

Если в начале вам показалось, что записи crontab трудны для понимания и запутаны, уверяю, что при их постоянном использовании вы очень скоро будете наизусть помнить порядок и назначение всех полей, а также название и расположение всех файлов, которые необходимо редактировать. Все, что требуется - это практика.

Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.

Базовая настройка CRON

Шаблон задания для Cron выглядит примерно так:

Вот иллюстрация этого же шаблона, которую можно сохранить себе:

Screenshot_10.jpg

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

Звёздочками обозначены конкретные блоки времени.

Для отображения содержимого crontab-файла текущего пользователя используйте команду:

Для редактирования заданий пользователя есть команда:

Ниже приведены несколько примеров cron-заданий:

  1. Чтобы выполнять команду каждую минуту, задание должно быть такое:
  2. Похожее задание, только команда будет вызываться каждые пять минут:
  3. Вызывать команду 4 раза в час (каждые 15 минут):
  4. Чтобы выполнить команду каждый час в 30 минут, пишем:

Т. е. команда будет выполняться не каждые 30 минут, а тогда, когда значение минут будет равно 30 (например, 10:30, 11:30, 12:30 и т. д.).

Ещё существуют готовые задания:

Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:

Команда для очистки всех заданий текущего пользователя:

Настройка cron для web программистов

1. Добавляем в cron задачу, которая будет выполнятся каждую минуту.
Набираем crontab -e и добавляем (будет выполняться под тем пользователем под кем вы зашли в SSH)

*/1 * * * * /usr/bin/php -q /server/cron/cron.php > /dev/null 2>&1

сохраняемся (SHIFT+Z 2раза )
Примечаие:
*/1 * * * * - означает что скрипт будет запускаться каждую минуту
> /dev/null - означает отправку результатов, которые выдаст скрипт, в никуда.
2>&1 - избавляет администратора сервера от писем, если скрипт закончит работу с ошибками

Настройка cron для системных администраторов

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

Так же существует anacron (anachronistic cron или асинхронный (анахроничный) cron) и его запуск и его задания тоже нужно учитывать, см. файл /etc/anacrontab и каталоги /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.monthly/ и /etc/cron.weekly/

Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

§ /etc/cron.minutely - каждую минуту;

§ /etc/cron.hourly - каждый час; ( cat /etc/cron.d/0hourly - тут настроен)

§ /etc/cron.daily - каждый день;

§ /etc/cron.weekly - каждую неделю;

§ /etc/cron.monthly - каждый месяц.

Список всех задач cron у всех пользователей в Linux

К сожалению для системного администратора нет такого инструмента, т.к задачи могут храниться в 8х местах

1. /etc/crontab (можно посмотреть глазами cat /etc/crontab)

2. Клиентский crontab ( crontab -u user -l)

3. /etc/anacrontab (можно посмотреть глазами cat /etc/anacrontab)

4. /etc/cron.d/ (Кроме того, cron считывает файлы в каталоге /etc/cron.d/)

5. /etc/cron.daily/ Запуск всех скриптов один раз в день

6. /etc/cron.hourly/ Запуск всех скриптов один раз в час

7. /etc/cron.monthly/ Запуск всех скриптов один раз в месяц

8. /etc/cron.weekly/ Запуск всех скриптов один раз в неделю

Для того чтобы пройти руками все клиентские Клиентский crontab ( crontab -u user -l), можно автоматизировать для всех пользователей очевидно нужно взять список пользователей в системе из /etc/passwd и сделать для каждого пользователя crontab -u USERNAME -l, то есть:

for user in $( cut -d ':' -f1 /etc/ passwd ); do crontab -u $user -l; done

Решение простое — создадим функцию allcrontab в файле

/.bashrc для ввода информации в более удобном виде:

/.bashrc или перелогиниваемся и выполняем в консоле allcrontab и видим красивый вывод списка всех задач cron у всех пользователей:

Но это не финишная прямая, а только начало, ведь опытный системный администратор знает, что кроме вывода списка заданий командой crontab -l -u USER есть еще задания планировщика в каталоге /etc/cron.d/ и это тоже нужно учитывать, потому что например панель хостинга ISPConfig сохраняет задания cron в каталоге /etc/cron.d/ с именами ispc_webXXX, где webXXX — это логин системного пользователя, например web30 и вывод crontab -l -u web30 нам скажет «no crontab for web30», а на самом деле в файле /etc/cron.d/ispc_web30 может быть такая картина:

ОТЛАДКА РАБОТЫ cron

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

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

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