Выполнение заданий по Cron
Cron — UNIX-программа, которая используются для периодического выполнения заданий в определённое время. Расписание и действия описываются инструкциями в файлах crontab, их можно посмотреть через SSH, командой:
crontab -l
Файл с заданиями, выглядит примерно так:
crontab -l * * * * * /usr/local/script.sh o */2 * * * /Usr/local/bin/wget -O - -q "https://example.com/update.php"
Для редактирования используется команда:
crontab -e
Редактирование в консоле крайне не удобно, поэтому на большинстве хостингов имеется web-интерфейс, что достаточно упрощает настройку, например, Masterhost.ru:
Или Timeweb.ru:
1
Команды делятся на две части – временной интервал и команда:
[минута] [час] [день месяца] [месяц] [день недели] [пользователь] [команда]
В большинстве хостингах «Пользователь» не доступен, далее в примерах он не указан.
2
Минуты
Задается числом от 0
до 59
.
Каждую минуту:
# Минута Час День Месяц День недели * * * * *
Каждую чётную минуту:
# Минута Час День Месяц День недели 0-59/2 * * * *
Каждую нечётную минуту:
# Минута Час День Месяц День недели 1-59/2 * * * *
Каждые 10 минут:
# Минута Час День Месяц День недели */10 * * * *
Часы
Задаются числом от 0
до 23
.
Каждый час:
# Минута Час День Месяц День недели 0 */1 * * *
Каждые 3 часа:
# Минута Час День Месяц День недели 0 */3 * * *
Каждый день, в 12:00:
# Минута Час День Месяц День недели 0 12 * * *
Несколько раз в день (6:00, 12:00, 18:00):
# Минута Час День Месяц День недели 0 6,12,18 * * *
Дни
Дени месяца, от 1
до 31
.
1-го и 15-го числа, в 9:00:
# Минута Час День Месяц День недели 0 9 1,15 * *
Дени недели
Задаются последним параметром: 1
— пн., 2
— вт., 3
— ср., 4
— чт., 5
— пт., 6
— сб., 0
или 7
— вс.
Каждый понедельник, в 6:30:
# Минута Час День Месяц День недели 30 6 * * 1
Каждый рабочий день в 9:00:
# Минута Час День Месяц День недели 0 9 * * 1-5
Несколько раз в неделю (понедельник, четверг):
# Минута Час День Месяц День недели 0 9 * * 1,4
Месяцы
Задаются числом от 1
до 12
.
Раз в месяц (9:00, первого числа):
# Минута Час День Месяц День недели 0 9 1 * *
В новый год:
# Минута Час День Месяц День недели 59 23 31 12 *
Константы
Для удобства доступны следующие константы:
@reboot
– при перезагрузки@yearly
,@annually
– раз год@monthly
– раз в месяц@weekly
– раз в неделю@daily
,@midnight
– каждый день@hourly
– каждый час
3
Во второй части указываются команды unix shell, можно указать несколько команд, разделив их точкой с запятой.Запустить bash-скрипт:
* * * * * /usr/local/script.sh
Запустить PHP-скрипт:
* * * * * /usr/local/bin/wget -O - -q "https://example. com/update.php"
Добавить директорию в архив:
* * * * * zip -r /home/backup.zip /home/site/www
Удалить файлы из директории:
* * * * * rm -rf /tmp/folder/*
Будьте осторожны при использовании команды rm -rf
, перед её использованием сделайте резервную копию файлов.
Сделать бэкап БД в архиве ZIP:
* * * * * mysqldump -uЛОГИН -hХОСТ -pПАРОЛЬ НАЗВАНИЕ_БД | gzip > /home/backup-`date +\%Y_\%m_\%d`_sql.gz
запуск РНР скрипта автоматически 1 раз в сутки | PHPClub
sipliy
Утомленный солнцем
- #1
запуск РНР скрипта автоматически 1 раз в сутки
Возможно ли запускать РНР скрипт автоматически по событию, напрмер при наступлении 12:00. Cron такое может ? Если не может , то кто может ?
tony2001
TeaM PHPClub
- #2
>Cron такое может ?
может
sipliy
Утомленный солнцем
- #3
ну так ка ? помогите подалуста. мой админ говорит \, что не может. Научите пожалуйста. Или где инфу раздобыть подскажите…
tony2001
TeaM PHPClub
- #4
можно lynx запускать, чтобы заходил на скрипт.
можно скомпилить PHP без апача(т.е. бинарником) и запускать РНР-скрипты в шелле — пишешь:
#! /usr/local/bin/php
<?
…..
?>
делаешь файл выполняемым и ./file.php тебя спасет.
админа — уволить, пускай маны читает.
sipliy
Утомленный солнцем
- #5
понимаешь, нужно чтобы РНР был скомпилен вместе с apache
tony2001
TeaM PHPClub
- #6
lynx запускай он зайдет на указанный УРЛ и скрипт выполнится.
man lynx
alex (balt)
Guest
- #7
Есть еще один выход. Сначала ты компилишь PHP без поддержки Apache. Тогда появляется файл /usr/bin/php (на RH, в других системах это может быть /usr/local/bin/php и т.д.).
В своем php-скрипте ты вписывыешь первую строку типа:
#!/usr/bin/php
а далее все как обычно
<? и т.д.
С этим можно работать как с shell или perl скриптами, засовывать их в cron, запускать с командной строки и т.п. и т.д.
После такой установки нужно перекомпилить php с поддержкой Apache. !!!
Для этого есть cron!
# crontab -l выводит все записанные в cron процессы!
# crontab -e позволяет редактировать cron редактором vi
Сделай в системе crontab -e, и в конец файла допиши
0 12 * * * /твой_путь_до_php.файла
tony2001
TeaM PHPClub
- #9
для этого надо сделать то, что я сказал выше.
т.е. нужен бинарник РНР.
3D-Dragon
Guest
- #10
Если через -lynx, то так:
/usr/bin/lynx -dump http://www. site.com/script.php > /dev/null 2>&1
Если через консольное PHP, то так:
/apache/bin/php -q /путь_к_скрипту//script.php
Amigo
Guest
- #11
Через гузло, но работает в 95% случаев.)
просто впиши так в крон (права для этого иметь должен).
cvs:~% crontab -e
———————————————
#minute hour mday month wday command
0 12 * * * lynx -dump http://www.name.ru/script.php /dev/null 2>&1 <—!!! не забудь перейти на след. строчку ентером как впишешь последнее, иначе не будет воркать
———————————————
(/dev/null 2>&1 сообщения давит, на всякий случай .Можешь вписать |mail [email protected] — будет вывод работы скрипта (если он есть) на мыло и метать начальнику.
более размашисто про форматы времени (каждые 15 минут или запуск 1 и 17 часов и так далее) погляди в ya.ru, например.
масса инфы.
Cron Jobs — пособие для начинающих
Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.
Введение
Шаблон задания для Cron выглядит примерно так:
Минуты(0-59) Часы(0-24) День(1-31) Месяц(1-12) День недели(0-6) Команда
Вот иллюстрация этого же шаблона, которую можно сохранить себе:
Формат cronjob-выражения
Звёздочками обозначены конкретные блоки времени.
Для отображения содержимого crontab-файла текущего пользователя используйте команду:
$ crontab -l
Для редактирования заданий пользователя есть команда:
$ crontab -e
Если эта команда выполняется в первый раз, вам предложат выбрать редактор для Cron:
no crontab for sk - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- простейший 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:
Выбирайте на своё усмотрение. Вот так изначально выглядит crontab-файл:
В этом файле как раз нужно перечислять одну за другой все команды.
Чтобы изменить crontab-файл другого пользователя (например, ostechnix):
$ crontab -u ostechnix -e
Ниже приведены несколько примеров cron-заданий:
- Чтобы выполнять команду каждую минуту, задание должно быть такое:
* * * * * <исполняемая-команда>
- Похожее задание, только команда будет вызываться каждые пять минут:
*/5 * * * * <исполняемая-команда>
- Вызывать команду 4 раза в час (каждые 15 минут):
*/15 * * * * <исполняемая-команда>
- Чтобы выполнить команду каждый час в 30 минут, пишем:
30 * * * * <исполняемая-команда>
Т. е. команда будет выполняться не каждые 30 минут, а тогда, когда значение минут будет равно 30 (например, 10:30, 11:30, 12:30 и т. д.).
- Значения времени можно комбинировать, перечислив их через запятую. Следующий код будет выполнять команду три раза в час: в 0, 5 и 10 минут.
0,5,10 * * * * <исполняемая-команда>
- Выполнять команду каждый час будет следующее задание:
0 * * * * <исполняемая-команда>
- Выполнение команды каждые два часа:
0 */2 * * * <исполняемая-команда>
- Чтобы выполнять команду каждый день (в 00:00):
0 0 * * * <исполняемая-команда>
- Выполнение команды каждый день в 03:00:
0 3 * * * <исполняемая-команда>
- Выполнение команды каждое воскресенье (sunday):
0 0 * * SUN <исполняемая-команда>
- Другой вариант задания, которое будет выполнять команду каждое воскресенье (естественно, тоже в 00:00):
0 0 * * 0 <исполняемая-команда>
- Выполнение команды каждый день с понедельника по пятницу:
0 0 * * 1-5 <исполняемая-команда>
- Следующее задание будет выполнять команду каждый месяц, 1-го числа в 00:00:
0 0 1 * * <исполняемая-команда>
- Выполнять команду в 16:15 каждого первого числа месяца будет это задание:
15 16 1 * * <исполняемая-команда>
- Выполнение команды каждые три месяца:
0 0 1 */3 * <исполняемая-команда>
- Выполнение команды в строго определённое время и месяц:
5 0 * 4 * <исполняемая-команда>
- Задание будет вызывать команду в начале каждого полугодия (в 00:00 1-го дня):
0 0 1 */6 * <исполняемая-команда>
- Выполнение команды каждый год 1-го января в 00:00:
0 0 1 1 * <исполняемая-команда>
Ещё существуют готовые задания:
@reboot
— одиночное выполнение команды при загрузке;@yearly
— раз в год;@annually
— тоже раз в год;@monthly
— раз в месяц;@weekly
— один раз в неделю;@daily
— раз в день;@midnight
— тоже раз в день;@hourly
— раз в час.
Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:
@reboot <исполняемая-команда>
Команда для очистки всех заданий текущего пользователя:
$ crontab -r
Чтобы узнать о подробностях, есть команда:
$ man crontab
Вышеперечисленного уже должно хватить для базовой работы с Cron и составления заданий.
Синтаксис crontab-генераторов
Процесс написания заданий сильно упрощают веб-инструменты. Они не требуют знаний синтаксиса Cron, потому что у них графический интерфейс, а задания генерируются в соответствии с вводимыми данными. Сайт генерирует задание, которое можно будет просто скопировать и вставить в crontab-файл.
Crontab.guru
crontab.guru — отличный сайт, чтобы изучить различные примеры cron-заданий. Просто введите данные и сайт самостоятельно сгенерирует конечное задание.
Сайт Crontag buru
На сайте есть разделы, посвящённые примерам и советам.
Crontag Generator
crontab-generator. org — ещё один сайт, который помогает быстро сгенерировать crotab-выражения. Принцип такой же: нужно ввести все необходимые данные в формы и нажать кнопку «Generate Crontab Line» внизу страницы.
Сайт Crontab Generator
Вот такое конечное выражение вы увидете на сайте:
Помимо этого, есть веб-инструмент «Crontab UI», который обеспечивает не только простоту создания crontab-заданий, но и безопасность. Вот статья, посвящённая этому инструменту.
Перевод статьи «A Beginners Guide To Cron Jobs»
Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.
Подробнее
Реклама на tproger.ru
Загрузка
Автоматизация задач с помощью cron в Ubuntu 18.04
Что такое cron?
Планировщик задач Cron — один из главных компонентов Unix-систем. Его предназначение — запуск определенных скриптов и задач в нужное время с заданной регулярностью.
Например, представим, что вам нужно делать ежедневный бэкап системы и базы данных. Каждый день запускать скрипт вручную не получится, к тому же не хочется днём нагружать систему ещё больше. Идеальный сценарий — запускать скрипт резервирования по ночам, при этом сохранять результаты в файл или уведомлять на служебную почту.
Для этого и подобных сценариев в Linux существует автоматизация задач, за которую отвечает специальный компонент-планировщик Cron. Пользователю достаточно только добавить нужный скрипт и указать регулярность выполнения. По умолчанию результаты отправляются на почту, но также их можно записывать в файл-журнал или вовсе никуда не выводить.
Установка cronВ большинстве Linux-дистрибутивов компонент Cron уже установлен по умолчанию. Но если в вашей системе это не так, это легко можно сделать вручную. Для этого сначала нужно обновить локальный индекс пакетов в системе, а затем установить непосредственно cron в Ubuntu.
sudo apt update
sudo apt install cron
Основная функция Cron — регулярное выполнение скриптов в фоновом режиме. Поэтому после установки нужно убедиться, что служба включена. Для этого воспользуемся диспетчером systemd.
sudo systemctl enable cron
Теперь cron установлен и запущен для каждого пользователя системы. Осталось разобраться, как планировать задачи в cron.
Как работает cron?Фактически все задачи записываются в файл /etc/crontab, в нём хранится и расписание, и непосредственно скрипты. Кроме этого, в файл можно добавлять служебные параметры — почту, оболочку, переменные среды и так далее. Задачи, добавленные каждым пользователем системы хранятся в /var/spool/cron/crontabs/.
Каждое задание добавляется с новой строки, а для того, чтобы задать расписание, используется специальный несложный синтаксис. Строка условно делится на две части — настройки регулярности выполнения и непосредственно скрипт.
Для того, чтобы временно отключить выполнение задачи, достаточно просто закомментировать её с помощью символа # в начале строки.
Расписание
Расписание — это пять полей, разделённых пробелами: минута (0–59), час (0–23), день (1–31), месяц (1–12, jan — dec), день недели (0–6, sun— mon). Для того, чтобы задавать регулярность выполнения задач, существуют специальные символы, которые значительно упрощают постановку задач Cron.
*
— символ подстановки, он представляет все значения. То есть, если вместо конкретных минут написать *, тогда скрипт будет выполняться ежеминутно.,
используется для создания списка. Если нужно запускать скрипт два раза в сутки, не нужно создавать две записи. Вместо этого в поле «часы» достаточно написать, например, 5,10, и скрипт будет выполняться два раза — в пять и в десять часов.-
— задаёт диапазон значений. Если по каким-то причинам вы хотите, чтобы ваш скрипт исполнялся только во второй половине недели, то достаточно написать в соответствующем поле 4-7./
обозначает шаг. Так, чтобы запускать скрипт каждые два часа в сутки, не нужно создавать 12 записей — достаточно просто написать */2. Но в качестве шага можно использовать только те числа, которые делят диапазон поровну, иначе скрипт не будет запускаться.
Примеры расписания:
* * * * *
— каждую минуту*/15 2-12 * * *
— каждые 15 минут, с 2 до 12 часов30 23 * * *
— каждый день в 23:301,55 */12 * 1-6 *
— в 1 и 55 минуту часа два раза в сутки, но только первые полгода.
Чтобы упростить процесс создания задач, в последних версиях современных дистрибутивов в компоненте Cron предусмотрены самые частые наборы переменных расписания:
- @reboot — задача выполняется только при загрузке системы, обычное расписание не предусматривает такой сценарий
- @yearly — задача выполняется один раз в год (синоним — @annualy)
- @monthly — скрипт запускается раз в месяц
- @daily — скрипт выполняется ежедневно (синоним — @midnight)
- @hourly — аналог запуску каждый час
Кроме того, в последних версиях Linux-дистрибутивов — в частности Ubuntu 20. 04 — помимо задач приписан ещё и запуск утилиты run-parts. Эта утилита отвечает за выполнение скриптов из следующих каталогов:
- /etc/cron.minutely — скрипты, которые должны выполняться каждую минуту
- /etc/cron.hourly — скрипты, которые должны выполняться каждый час
- /etc/cron.daily — скрипты, которые должны выполняться ежедневно
- /etc/cron.weekly — скрипты, которые должны выполняться каждую неделю
- /etc/cron.monthly — скрипты для ежемесячного запуска.
В файле /etc/crontab использование утилиты run-parts не отличается от обычных задач и выглядит примерно так:
# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 23 * * * root run-parts /etc/cron.daily
0 23 * * 0 root run-parts /etc/cron.weekly
20 23 * * * root run-parts /etc/cron.monthly
Для тех, кто только начинает знакомиться с синтаксисом планировщика crontab, советуем при создании записей пользоваться сервисом crontab. guru. Вы также можете настраивать задачи в панели cloud.timeweb.com или обратиться в службу поддержки — наши специалисты помогут вам и проконсультируют, если возникнут сложности.
Запуск скрипта
С помощью демона Cron вы можете исполнять любые скрипты так, будто вы находитесь в консоли. Например, для того, чтобы регулярно писать строку в файл, просто добавьте к расписанию команду для выполнения. Получится такое cron-выражение:
* * * * * /bin/echo "test string" >> /home/user/cron.log
Но если вам нужно, чтобы скрипт выполнялся в фоне, нужно перенаправить его вывод в пустую директорию /dev/null. Представим, что нам нужно регулярно обрабатывать таблицу с транзакциями, чтобы проверять статусы платежей пользователей. Для этого у нас написан скрипт на PHP. Тогда в cron добавим следующую запись
*/10 * * * * /usr/bin/php /var/www/example.com/billing/proccessing-handler.php > /dev/null
В этой строке cron каждые 10 минут исполняет php-скрипт processing-handler. php, но сохраняет только ошибки.
Задачи cron запускаются от того пользователя, от которого они были добавлены в crontab. Это одна из самых распространённых ошибок при создании заданий. Часто скрипт нужно выполнять от пользователя root, но в crontab запись была сделана рядовым пользователем.
Как запланировать задачи в UbuntuХоть crontab — это просто файл, изменять его напрямую не рекомендуется. Вместо этого нужно использовать команду crontab -e
. Это позволит избежать ошибок синтаксиса или проблем с правами на файл. Настройка cron — по сути и есть просто редактирование файла с помощью вашего любимого текстового редактора, его вы сможете выбрать при первом запуске или с помощью команды select-editor.
В появившемся окне внесите своё расписание задач, каждое с новой строки. Продолжая пример со скриптом-обработчиком транзакций, добавим нужное задание в crontab. После добавления всех необходимых строк просто сохраняем изменения и закрываем редактор. Задача начала регулярно выполняться.
Для того, чтобы посмотреть, какие задачи выполняются, нужно прочитать файл. Существует много способов посмотреть содержимое файла —с помощью любого текстового редактора, команды cat или crontab -e. Но помимо этого вы можете воспользоваться специальной командой crontab -l
.
Удалить файл можно командой crontab -ri
. Флаг i очень важен, он запрашивает ваше подтверждение перед безвозвратным удалением файла. Если выполнить команду без него, файл удалится сразу.
Демон Cron по умолчанию будет уведомлять вас о результатах работы скрипта на почту, которую вы указали при создании профиля. Помимо этого вы можете настроить отправку результатов себе на другой электронный адрес, сохранять результаты в журнал вывода cron или ничего с ними не делать.
Уведомления на почту
Если вы хотите получать уведомления о работе скрипта не на тот электронный адрес, который указан в вашем профиле, модифицируйте файл crontab. В нём укажите почту, на которую планировщик должен направить результаты. Обратите внимание, что для корректной отправки результатов на вашем сервере должен быть установлен и настроен почтовый агент.
Адрес электронной почты задаётся в начале файла crontab c помощью оператора MAILTO. Ниже — пример выдуманной задачи по очистке логов, её результат приходит на почту [email protected].
MAILTO = "[email protected]"
0 1 * * * /bin/bash /remove-log.sh
Уведомления в журнал
Хорошим тоном считается сохранять результаты работы фоновых скриптов в журнал. Такой вариант особенно хорошо подходит для задач, которые выполняются часто. В случае неудачного выполнения задачи отчёт рискует потеряться в почте, а лог-файл всегда можно разобрать, найти ошибки и поправить скрипт.
С помощью оператора >
нужно направить вывод в файл журнала — всё, в том числе ошибки, окажется в лог-файле.
*/20 * * * * rm -r /home/user/cache > /home/user/reports/cron-rm-cache. log
Отключить вывод
Когда скрипт ничего не выводит и просто исполняется в фоне, мы можем вообще отключить уведомления и журналирование. Для этого перенаправляем результат в уже знакомую нам пустую директорию /dev/null. Туда же — вывод ошибок, для этого добавляем конструкцию 2>&1, где 2 — стандартная ошибка, stderr, а &1 — вывод по умолчанию, то есть в нашем случае /dev/null.
30 2,6 * * * /usr/bin/php /var/www/logout-bots.php > /dev/null 2>&1
Но даже если вывод результатов отключён, можно проверить, работает ли скрипт, в журнале syslog. Отыщите там слово CRON с помощью команды grep.
grep CRON /var/log/syslog
Если в результате вы увидите процесс исполнения команд, значит всё настроено верно, и скрипт работает. Если что-то пошло не так, там же будут выведены ошибки.
Crontab — формат записи событий | Битрикс-веб-мастер
Cron это программа, выполняющая задания по расписаню. Позволяет неоднократный запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени.
При загрузке системы, запускается демон cron и проверяет очередь заданий at и заданий пользователей в файлах crontab. При запуске, демон cron сначала проверяет каталог /var/spool/cron на наличие файлов crontab, файлы crontab имеют имена пользователей, соответствующие именам пользователей из /etc/passwd Каждый пользователь может иметь только один файл crontab, записей в файле может быть несколько.
Файлы crontab содержат инструкции для демона cron, который запустит задание(я) описанное в файле crontab. Все файлы crontab из каталога /var/spool/cron загружаются в память, одновременно с ними загружаются файлы из /etc/cron.d После этого демон cron загружает содержимое файла /etc/crontab.
После того, как демон cron запущен и прочел содержимое всех файлов crontab, он бездействует, просыпаясь каждую минуту и проверяя не требуется ли запуск какой-либо команды в данную минуту, или не появился ли новый файл crontab который необходимо обработать. Демон cron определяет изменения по времени модификации файлов или каталогов, такое его свойство избавляет от необходимости перезапуска демона.
Чтобы получить пользователю доступ к управлению заданиями cron, ему необходимо воспользоваться командой:
crontab -e
посмотреть юзером «user» есть ли у него файл crontab ,достаточно набрать команду:
crontab -l
если файл существует-будет показано его содержимое.
Для удаления файла используется команда:
crontab -r
Для управления файлами crontab пользователем «root» используется синтаксис:
crontab -u user_name file
Данная команда создаст файл crontab из файла «file» для пользователя «user_name». Ключ -u
означает, чей crontab будет обработан. Если опция не задана,
то будет обработан crontab того пользователя, который запустил команду crontab.
Просмотре, удаление и редактирование файла crontab для определенного пользователя из под root, выглядит так:
crontab -u user_name -l crontab -u user_name -r crontab -u user_name -e
Для редактирования файла crontab используется редактор, заданный переменной окружения VISUAL или EDITOR.
Формат и значения полей
Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей. Пользовательские файлы crontab находятся в каталоге /var/spool/cron
Общий формат команды имеет вид:
минута час день_месяца месяц день_недели команда
Допустимые значения:
- минута
- от 0 до 59
- час
- от 0 до 23
- день_месца
- от 1 до 31
- месяц
- от 1 до 12 (можно 3 буквы из названия месяца: от jan до dec)
- день недели
- от 0 до 6 (имейте ввиду, что 0 — это воскресение; можно также писать буквенное значение: от sun до sat)
Каждое из полей даты и времени может быть обозначено символом * ,будет соответствовать любому возможному значению.
Также для этих полей можно указывать диапазоны значений, разделенных дефисом. Например, следующая запись, будет печатать «HELLO» в 5:00 на 4,5,6,7,8,9,10 дни января, февраля, марта и апреля:
* 5 4-10 0-3 * echo "HELLO"
А такая запись, будет печатать фразу каждый четный час, каждую субботу:
* */2 * * sat echo "HELLO"
Данная запись является краткой формой для аналогичной ей:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * 6 echo "HELLO"
Фраза, которая поздравит вас с Новым годом:
59 23 31 dec * echo "Happy new year"
Для отладки постановки заданий, можно настроить отправку результатов в файл:
0-59 * * * * /home/user/mail 2>/tmp/tmp. cron
Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron и вы всегда сможете узнать причину. В случае перенаправления вывода в файл, письмо, юзеру указанному в переменной MAILTO отправлено не будет.
Посмотреть информацию о всех командах запускаемых демоном cron можно в каталоге /var/log называются cron, cron1 и т.д. В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день.
Немного примеров
Планирование задач в течение определённого времени. Следующая запись, позволит выполнять скрипт полного резервного копирования (full-backup) 10 июня в 8.30:
30 08 10 06 * /home/developer/full-backup
Расписание задач для более частого выполнения (например, дважды в день). Следующий скрипт использует дополнительное резервное копирование дважды в день каждый день. В этом примере выполняется дополнительное резервное копирование (incremental-backup) в 11:00 и в 16:00 каждый день. Значения через запятую в поле указывают, что команда должна быть выполнена в каждое указанное время:
00 11,16 * * * /home/developer/bin/incremental-backup
Расписание работы в течение определённого интервала времени (например, только в будние дни). Этот пример каждый день проверяет состояние базы данных (включая выходные) в течение рабочих часов с 9 утра до 6 вечера.
Этот пример проверяет состояние базы данных каждый рабочий день (кроме субботы и воскресенья) с 9 утра до 6 вечера:
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
Выполнение какой-то команды cron каждую минуту:
* * * * * CMD
* — означает возможную единицу – то есть, каждую минуту каждого часа в течение года. Указание */5 в поле минут означает каждые 5 минут. Указание 0-10/2 в поле минут означает каждые 2 минуты в первых 10 минутах. Таким образом, данная условность может быть использована во всех 4 полях.
Запуск фоновых задач Cron каждые 10 минут:
*/10 * * * * /home/ramesh/check-disk-space
Существуют особые условия, когда вместо 5 полей вы можете использовать @ и далее ключевое слово – такие как перезагрузка, полночь, ежегодно, ежечасно.
- @yearly или @annually
- Эквивалент записи: 0 0 1 1 *, которая означает выполнение задачи раз в год
- @monthly
- Эквивалент: 0 0 1 * * — выполнение задачи раз в месяц
- @weekly
- Эквивалент: 0 0 * * 0 — выполнение задачи раз в неделю
- @daily
- Эквивалент: 0 0 * * * — выполнение задачи раз в день
- @hourly
- Эквивалент: 0 * * * * — выполнение задачи каждый час
- @midnight
- Выполнение задачи в полночь
- @reboot
- Выполнение задачи при запуске системы
В таком формате, Расписание работы для первой минуты каждого года с использованием @yearly будет иметь вид:
@yearly /home/developer/red-hat/bin/annual-maintenance
Запуск задач каждый день с использованием @daily
@daily /home/developer/arch-linux/bin/cleanup-logs "day started"
Используя ключевое слово @reboot, будет выполняться указанная команда каждый раз после загрузки системы:
@reboot CMD
Перенаправление вывода
Профессионалы отключают вывод результатов выполнения команды в консоль. Для этого используется команда вида:
cron job command > /dev/null 2>&1
Оператор > («больше чем»), как в примере выше, переадресовывает вывод программы. В данном случае, что-то отправляется в /dev/null, а что-то переадресовывается в &1
Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы.
Результат программы обычно печатается в стандартной вывод и иногда в файл «STDERR» (ошибка). Все это три дескриптора файла, которые часто называют STDIN, STDOUT и STDERR. Но часто к ним обращаются не по имени, а по номеру: 0 — STDIN, 1 — STDOUT и 2 — STDERR. По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT
Т.е. запись, указанная выше, означает команду, которая направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод). Затем все ошибки (то есть STDERR) перенаправить в стандартный вывод.
Такая маленькая хитрость позволит вам не засорять логи лишними данными.
Также можно лог направить в какой-то специальный файл с разделением по дням, к примеру. Для этого в имя файла нужно добавить текущую дату в нужном формате:
cron job command >> "/home/bitrix/www/logs/cron/prices_$(date +\%Y_\%m_\%d).log" 2>&1
Вот, в принципе, и все.
Еще ответ на один очень частый у новичков вопрос: «Как выполнять задачи каждую секунду?» Ответ на данный вопрос простой: никак! Вы не можете настроить выполнение cron на каждую секунду. Потому что минимальная единица выполнения cron – минута. В обычном сценарии нет необходимости запускать выполнение cron каждую секунду. И если у вас стоит задача запуска скрипта каждую секунду — значит стоит пересмотреть задачу.
Задания по расписанию в Linux cron
Введение | |
Инструкция | |
Каждую минуту | |
Каждый час | |
Каждый день | |
Несколько раз в день | |
После перезагрузки | |
Запуск из других директорий | |
Python скрипт по расписанию | |
Отключить отправку email | |
Похожие статьи |
Введение
wiki
cron — классический демон (компьютерная программа в системах класса UNIX), использующийся для периодического выполнения заданий в определённое время.
Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные каталоги.
Название cron образовано от греческого слова χρόνος (хрόнос) — время (по-английски — chronos).
В системах на базе systemd cron фактически замещён встроенным механизмом systemd.timer.
Инструкция
Файлы crontab, создаваемые для отдельных пользователей, находятся в каталоге
/usr/spool/cron/crontabs/
или
/var/spool/cron/tabs/.
Редактировать их вручную не рекомендуется, для этого используют команду crontab -e .
Файлы crontab , используемые для управления всей системой, располагаются в каталоге
/etc/cron.d/.
Кроме того, в каталогах
/etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/
размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).
Запускать скрипт каждую минуту
crontab -e
*/1 * * * * /home/andrei/script.sh
Или просто
* * * * * /home/andrei/script.sh
Запускать скрипт каждый час
crontab -e
0 * * * * /home/andrei/script.sh
Этот скрипт будет выполняться каждую нулевую минуту.
Запускать скрипт каждый день
crontab -e
0 1 * * * /home/andrei/script.sh
Этот скрипт будет выполняться каждую день в час ночи.
Запускать скрипт несколько раз в день
Скрипт будет запускаться в 7:00, 10:00 и 16:00
crontab -e
0 7 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
0 10 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
0 16 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
Этот скрипт будет выполняться каждую день в час ночи. > /dev/null 2>&1 отключает отправку писем с уведомлениями .
После перезагрузки
В примере сервис sshd будет перезапускаться после каждого ребута.
cd
touch restart_sshd.sh
echo «systemctl restart sshd» > restart_sshd.sh
crontab -e
@reboot /home/andrei/restart_sshd.sh
no crontab for andrei — using an empty one
crontab: installing new crontab
Запуск из других директорий
По умолчанию cron запускает скрипты из домашней директории
Я сталкивался с тем, что cron не видит скрипты в домашней директории если не указать в crontab полный путь.
То есть такое задание не выполнится
* * * * * script.sh
А это сработает:
* * * * * /home/andrei/script.sh
Чтобы запустить скрипт из другой директории — в неё нужно сперва перейти
* * * * * cd monitoring/new_scripts && $(which bash) script. sh
cron перейдёт в нужную директорию а потом увидев && поймёт что нужно сделать И выполнение скрипта.
Логическое или можно задать с помощью ||
Python скрипт по расписанию
Чтобы запустить .py скрипт из произвольной директории — перейдите в неё и выполните $(which python3) название файла
Например:
crontab -e
* * * * * cd python_scripts && $(which python3) script.py
Отключить отправку email
Чтобы запустить отключить оповещения по email, которые посылает вам cron такие как
You have new mail in /var/spool/mail/andrei
Нужно перенаправить вывод в /dev/null
Например:
crontab -e
* * * * * /home/andrei/script.sh > /dev/null 2>&1
Linux | |
FAQ | |
Debian | |
Ubuntu | |
CentOS | |
Rocky | |
Bash | |
Настройка сети | |
Файлы, директории, ссылки… | |
Изучить свободное место на диске | |
Объединить . pdf файлы | |
diff: сравнение файлов | |
find: поиск файлов | |
wget: скачивание файлов | |
kill: завершить процесс | |
curl | |
make | |
signal: системные сигналы | |
env: переменные окружения | |
localectl: язык | |
systemctl: Список активных сервисов | |
Firewall | |
SCP: обмен файлами; | |
SSH: удалённый доступ | |
cron: задания по расписанию | |
sudo | |
Мониторинг ресурсов | |
C | |
C++ |
Руководство по выражениям Cron
Последнее изменение: 12 марта 2021 г.
Лучшие авторы
Если у вас есть несколько лет опыта работы с экосистемой Java и вы хотите поделиться им с сообществом, ознакомьтесь с нашим Руководством по участию .
Generic Top
Начало работы с Spring 5 и Spring Boot 2 с помощью курса Learn Spring : >> ПРОВЕРИТЬ КУРС 1. ОбзорПроще говоря, cron — это базовая утилита, доступная в системах на основе Unix. Это позволяет пользователям планировать задачи для периодического запуска в указанную дату/время. И, естественно, это отличный инструмент для автоматизации многих процессов, которые в противном случае потребовали бы вмешательства человека.
Cron работает как демон. Это означает, что его нужно запустить только один раз, и он будет продолжать работать в фоновом режиме. Этот процесс использует crontab для чтения записей расписаний и запуска задач.
Со временем формат выражения cron стал широко применяться , и многие другие программы и библиотеки используют его.
Узнайте, как планировать задания с помощью Quartz API.
Подробнее →
Как использовать аннотацию @Scheduled в Spring, чтобы запускать задачи после фиксированной задержки, с фиксированной скоростью или в соответствии с выражением cron.
Подробнее →
2. Работа с CrontabРасписание cron представляет собой простой текстовый файл, расположенный в папке /var/spool/cron/crontabs в системах Linux. Мы не можем редактировать файлы crontab напрямую , поэтому нам нужно получить к ним доступ с помощью команды crontab .
Чтобы открыть файл crontab , нам нужно запустить эту команду:
кронтаб -e
Каждая строка в crontab представляет собой запись с выражением и командой для запуска:
* * * * * /usr/local/ispconfig/server/server.sh
Эта запись запускает указанный сценарий каждую минуту.
3. Выражение CronДавайте разберемся с выражением cron .
Состоит из пяти полей:
<минута> <час> <день месяца> <месяц> <день недели> <команда>3.1. Специальные символы в выражении
- * (все) указывает, что событие должно происходить в каждую единицу времени. Например, «*» в поле < минут> означает «за каждую минуту».
- ? (любой) используется в полях < день-месяца> и < день-недели> для обозначения произвольного значения и, таким образом, значения поля игнорируется. Например, если мы хотим запускать сценарий «5 числа каждого месяца» независимо от того, какой день недели приходится на эту дату, мы указываем «?» в поле < день-недели> .
- – (диапазон) определяет диапазон значений. Например, «10-11» в <час> 9Поле 0016 означает «10 и 11 часов».
- , (значения) указывает несколько значений. Например, «MON, WED, FRI » в поле < day-of-week> означает «понедельник, среда и пятница».
- / (приращение) указывает возрастающие значения. Например, «5/15» в поле < минут> означает «5, 20, 35 и 50 минут часа».
- L (последний) имеет разные значения при использовании в различных областях. Например, если он применяется в < 9Поле 0015 день-месяц> означает последний день месяца, т. е. «31 января» и так далее в соответствии с календарным месяцем. Его можно использовать со значением смещения, например «L-3», которое обозначает «с третьего по последний день календарного месяца». В < day-of-week> указывается «последний день недели». Его также можно использовать с другим значением в < day-of-week> , например «6L», что означает «последняя пятница».
- W (день недели) определяет день недели (с понедельника по пятницу), ближайший к данному дню месяца. Например, если мы укажем «10 Вт» в поле < day-of-month> , это означает «день недели, близкий к 10-му числу этого месяца». Таким образом, если «10-е» — это суббота, задание будет запущено «9-го числа», а если «10-е» — воскресенье, оно будет запущено «11-го числа». Если мы укажем «1W» в < день-месяца> и если «1-е» — это суббота, задание будет запущено «3-е», то есть в понедельник, и оно не вернется к предыдущему месяцу.
- # задает «N-е» появление дня недели месяца, например, «третья пятница месяца» может быть обозначена как «6#3».
Давайте посмотрим несколько примеров выражений cron с использованием полей и комбинаций специальных символов:
В 12:00 (полдень) каждый день :
0 12 * * ?
Каждые пять минут, начиная с 13:00. и заканчивается в 13:55. а затем начиная с 6 часов вечера. и заканчивается в 18:55 каждый день :
0/5 13,18 * * ?
Каждую минуту, начиная с 13:00. и заканчивая в 13:05, каждый день :
0-5 13 * * ?
В 13:15 и 13:45 каждый вторник месяца июня :
15,45 13 ? 6 Вт
В 9:30 каждый понедельник, вторник, среду, четверг и пятницу :
30 9 ? * ПН-ПТ
В 9:30 15-го числа каждого месяца :
30 9 15 * ?
В 18:00 в последний день каждого месяца :
0 18 л * ?
В 18:00 с третьего по последний день каждого месяца :
0 18 Л-3 * ?
В 10:30 в последний четверг каждого месяца :
30 10 ? * 5л
В 10:00 третьего понедельника каждого месяца :
0 10 ? * 2#3
В 12 часов ночи каждый день в течение пяти дней, начиная с 10 числа месяца :
0 0 10/5 * ?4. Специальные строки Cron
В дополнение к полям, указанным в выражении cron, также поддерживаются некоторые специальные, предопределенные значения, которые мы можем использовать вместо полей:
- @reboot — выполнить один раз при запуске
- @ежегодно или @ежегодно – выполняется один раз в год
- @ежемесячно – запускать раз в месяц
- @еженедельно – запускать раз в неделю
- @ежедневно или @полночь – запускать один раз в день
- ежечасно – ежечасно
В этой быстрой статье мы рассмотрели заданий cron и заданий crontab .
Мы также видели ряд примеров выражений, которые мы можем использовать в нашей повседневной работе или просто делать выводы из других выражений.
Универсальное дно
Начните работу с Spring 5 и Spring Boot 2, пройдя курс Learn Spring : >> ПРОВЕРИТЬ КУРСПонимание синтаксиса Cron в планировщике заданий
Триггеры cron, которые можно настроить в планировщике заданий Orchestration Server, используют класс Quartz crontrigger для принятия решения о том, когда запускать выполнение задания. Он основан на стандартном формате Quartz, описание которого вы можете найти на веб-сайте KickJava.
В этом разделе содержится следующая информация:
Раздел 12.3.1, Формат
Раздел 12.3.2, Специальные символы
Раздел 12.3.3, Примеры синтаксиса Cron
Раздел 12.3.4, Меры предосторожности при планировании Cron
12.3.1 Формат
Выражение cron представляет собой строку, состоящую из 6 или 7 полей, разделенных пробелом. Поля могут содержать любые допустимые значения, а также различные комбинации разрешенных специальных символов для этого поля. Описание полей приведено в следующей таблице:
Таблица 12-2 Поля в выражении Cron
Секунды | Да | 0-59 | , — * / |
Минуты | Да | 0-59 | , — * / |
Часы | Да | 0-23 | , — * / |
День месяца | Да | 1-31 | , — * ? / Д Ш |
Месяц | Да | 1-12 или январь-декабрь | , — * / |
День недели | Да | 1-7 ИЛИ ВС-СБ | , — * ? / л # |
Год | № | ПУСТОЙ, 1970-2099 | , — * / |
Выражения Cron могут быть такими простыми, как это:
* * * * ? *
Или выражения cron могут быть более сложными, например:
0 0/5 14,18,3-39,52 ? ЯНВ, МАР, СЕН ПН-ПТ 2002-2011
12.
3.2 Специальные символыСинтаксис Cron включает в себя логические операторы, представляющие собой специальные символы, которые выполняют операции со значениями, представленными в полях cron.
Таблица 12-3 Специальные символы в синтаксисе Cron сервера оркестрации
звездочка ( * ) | Задает все возможные значения для поля | Звездочка в поле времени часа соответствует «каждый час». |
знак вопроса (?) | Допускается знак вопроса ( ? ) в полях дня месяца и дня недели. Он используется для указания «нет определенного значения», что полезно, когда вам нужно указать что-то в одном из этих двух полей, но не в другом. | Если вы хотите, чтобы триггер срабатывал в определенный день месяца (например, 10-е число), но вам все равно, какой это день недели, введите 10 в поле дня месяца и ? в поле дня недели. |
тире (-) | Задает диапазон значений | 2-5, что эквивалентно 2,3,4,5 |
запятая ( , ) | Задает список значений | 1,3,4,7,8 |
косая черта ( / ) | Используется для пропуска заданного количества значений | */3 в поле часов эквивалентно 0,3,6,9,12,15,18,21. Звездочка ( * ) указывает «каждый час», а /3 означает только первый, четвертый, седьмой. Вы можете использовать число перед косой чертой, чтобы установить начальное значение. Например, 2/3 означает 2,5,8,11 и так далее. |
Л («последний») | Символ L разрешен для полей дня месяца и дня недели. Указывает либо последний день месяца, либо последний ххх день месяца. | Значение L в поле дня месяца означает «последний день месяца», то есть 31-й день для января или 28-й день для февраля в невисокосные годы. Если вы используете L в поле дня недели отдельно, это просто означает 7 или SAT. Но если вы используете его в поле дня недели после другого значения, это означает «последний ххх день месяца». Например, 6L означает «последняя пятница месяца». ПОДСКАЗКА: При использовании параметра L будьте осторожны и не указывайте списки или диапазоны значений. Это приводит к запутанным результатам. |
Вт («будний день») | В поле дня месяца разрешен символ W. Указывает ближайший к данному дню рабочий день (понедельник-пятница). | Если вы укажете 15W в качестве значения для поля дня месяца, значение будет «ближайший день недели к 15-му числу месяца». Итак, если 15-е число — суббота, триггер сработает в пятницу, 14-го. Если 15-е число — воскресенье, триггер сработает в понедельник 16-го числа. Если 15-е число является вторником, оно срабатывает во вторник 15-го числа. Однако, если вы укажете 1W в качестве значения дня месяца, а 1-е число — это суббота, триггер сработает в понедельник 3-го числа, потому что он не «перепрыгивает» через границу дней месяца. Символ W можно указывать только в том случае, если день месяца представляет собой один день, а не диапазон или список дней. ПОДСКАЗКА: Вы можете комбинировать символы L и W для выражения дня месяца, чтобы получить LW, что переводится как «последний рабочий день месяца». |
знак фунта стерлингов ( # ) | В поле дня недели разрешен символ решетки ( # ). Этот символ используется для указания «n-го» xxx дня месяца. | Значение 6#3 в поле дня недели означает третью пятницу месяца (6-й день = пятница и #3 = 3-й день в месяце). Другие примеры: 2#1 указывает на первый понедельник месяца, а 4#5 указывает на пятую среду месяца. Однако, если вы укажете #5 и в месяце будет менее 5 дней недели, в этом месяце срабатывания не произойдет. |
ПРИМЕЧАНИЕ: Допустимые символы и названия месяцев и дней недели не чувствительны к регистру. ПН — это то же самое, что ПН.
Вы можете указать дни в двух полях: день месяца и день недели. Если оба указаны в записи, они являются кумулятивными, что означает, что выполняются обе записи.
12.3.3 Примеры синтаксиса Cron
В следующей таблице показаны примеры полных выражений cron и их соответствующие значения.
Таблица 12-4 Результаты изменения синтаксиса Cron во времени выполнения
0 0 12 * * ? | Пожар в 12:00. (полдень) каждый день |
0 15 10 ? * * | Пожар в 10:15 каждый день |
0 15 10 * * ? | Пожар в 10:15 каждый день |
0 15 10 * * ? * | Пожар в 10:15 каждый день |
0 15 10 * * ? 2012 | Пожар в 10:15 каждый день в течение 2012 года |
0 * 14 * * ? | Пожар каждую минуту, начиная с 14:00. и заканчивается в 14:59, каждый день |
0 0/5 14 * * ? | Пожар каждые пять минут, начиная с 14:00. и заканчивая в 14:55, каждый день |
0 0/5 14,18 * * ? | Пожар каждые пять минут, начиная с 14:00. и заканчивая в 14:55, и стрелять каждые пять минут, начиная с 18:00. и заканчивается в 18:55, каждый день |
0 0-5 14 * * ? | Пожар каждую минуту, начиная с 14:00. и заканчивая в 14:05, каждый день |
0 10,44 14 ? 3 СР | Пожар в 14:10. и в 14:44 каждую среду марта |
0 15 10 ? * ПН-ПТ | Пожар в 10:15 каждый понедельник, вторник, среду, четверг и пятницу |
0 15 10 15 * ? | Пожар в 10:15 15 числа каждого месяца |
0 15 10 15 * ? | Пожар в 10:15 последнего дня каждого месяца |
0 15 10 ? * 6л | Пожар в 10:15 в последнюю пятницу каждого месяца |
0 15 10 ? * 6л 2011-2014 | Пожар в 10:15 каждую последнюю пятницу каждого месяца в 2011, 20012, 2014 и 2014 годах |
0 15 10 ? * 6#3 | Пожар в 10:15 в третью пятницу каждого месяца |
0 0 12 1/5 * ? | Пожар в 12:00. (полдень) каждые пять дней каждого месяца, начиная с первого числа месяца |
0 11 11 11 11 ? | Fire каждое 11 ноября в 11:11 |
12.3.4 Меры предосторожности при планировании cron
При использовании планирования cron следует помнить о следующих элементах:
Всегда проверяйте результат добавления ? и * символы в полях дня недели и дня месяца, чтобы убедиться, что ожидаемое поведение срабатывает правильно.
Поддержка указания как дня недели, так и дня месяца не завершена. В настоящее время вы должны использовать ? символ в одном из этих полей.
Будьте внимательны при установке времени запуска с 00:00 до 01:00. Переход на летнее время или обратно может привести к пропуску или повторению запуска по расписанию, в зависимости от того, двигаются ли часы назад или вперед.
Учебное пособие по Cron Trigger
|
Введение
cron — это инструмент UNIX, который существует уже давно, поэтому его возможности планирования являются мощными. и доказано. Класс CronTrigger основан на возможностях расписания cron.
CronTrigger использует «выражения cron», которые могут создавать расписания срабатывания, такие как: «В 8:00 каждый С понедельника по пятницу» или «В 1:30 каждую последнюю пятницу месяца».
Выражения Cron являются мощными, но могут быть довольно запутанными. Этот урок направлен на то, чтобы раскрыть некоторые тайны создание выражения cron, предоставляющего пользователям ресурс, который они могут посетить, прежде чем задать вопрос на форуме или в рассылке список.
Формат
Выражение cron представляет собой строку, состоящую из 6 или 7 полей, разделенных пробелом. Поля могут содержать любые допустимые значения, а также различные комбинации разрешенных специальных символов для этого поля. Поля такие следует:
Имя поля | Обязательно | Допустимые значения | Разрешенные специальные символы |
---|---|---|---|
Секунды | ДА | 0-59 | , — */ |
Минуты | ДА | 0-59 | , — */ |
Часы | ДА | 0-23 | , — */ |
День месяца | ДА | 1-31 | , — * ? / Д Ш |
Месяц | ДА | 1-12 или ЯНВАРЬ-ДЕКАБРЬ | , — */ |
День недели | ДА | 1-7 или SUN-SAT | , — * ? / Л # |
Год | НЕТ | пустой, 1970-2099 | , — */ |
Таким образом, выражения cron могут быть такими простыми, как это: * * * * ? *
или более сложные, например: 0/5 14,18,3-39,52 * ? ЯНВАРЬ, МАР, СЕНТЯБРЬ ПН-ПТ 2002-2010
Специальные символы
* ( «все значения» ) — используется для выбора всех значений в поле. Например, «*” в поле минут означает «каждую минуту» .
? ( «без конкретного значения» ) — полезно, когда нужно указать что-то в одном из два поля, в которых разрешен символ, но не другой. Например, если я хочу, чтобы мой триггер срабатывал определенный день месяца (скажем, 10-е число), но неважно, какой это день недели, я бы поставил «10» в поле дня месяца и «?» в поле дня недели. См. приведенные ниже примеры для пояснения.
— — используется для указания диапазонов. Например, «10-12» в поле часа означает «день часов 10, 11 и 12” .
, — используются для указания дополнительных значений. Например, «ПН, СР, ПТ» в день недели поле означает «дни понедельник, среда и пятница» .
/ — используется для указания приращений. Например, «0/15» в поле секунд означает » секунды 0, 15, 30 и 45” . А «5/15» в поле секунд означает «секунды 5, 20, 35 и 50» . Вы можете также укажите «/» после символа «» — в этом случае «» эквивалентно наличию «0» перед «/». «1/3» в поле дня месяца означает «срабатывать каждые 3 дня, начиная с первого числа месяца» .
L ( «последний» ) — имеет разное значение в каждом из двух полей, в которых он указан. допустимый. Например, значение «L» в поле дня месяца означает 9.0015 «последний день месяца» — день 31 января, 28 февраля в невисокосные годы. Если используется отдельно в поле дня недели, это просто означает «7» или «СБ». Но если используется в поле дня недели после другого значения, это означает «последний ххх день месяц» — например, «6L» означает «последняя пятница месяца» . Вы также можете указать смещение с последнего дня месяца, например «L-3», что означает предпоследний день календарного месяца. При использовании опции ‘L’ важно не указывать списки или диапазоны значений, так как вы получите сбивающие с толку/неожиданные результаты.
W ( «день недели» ) — используется для указания дня недели (понедельник-пятница), ближайшего к данному дню. Например, если вы укажете «15 Вт» в качестве значения поля дня месяца, значение будет следующим: «день месяца». ближайший рабочий день к 15-му числу месяца» . Таким образом, если 15-е число — суббота, триггер сработает в пятницу, 14-го. Если 15 число выпадает на воскресенье, триггер сработает в понедельник 16 числа. Если 15 число вторник, то сработает Вторник, 15-е. Однако, если вы укажете «1W» в качестве значения дня месяца, а 1-е число — это суббота, триггер сработает в понедельник 3-го числа, так как не будет «прыгать» за границу месячных дней. Символ «W» может только указывается, когда день месяца является одним днем, а не диапазоном или списком дней.
Символы «L» и «W» также можно комбинировать в поле дня месяца, чтобы получить «LW», что переводится как *»последний рабочий день месяца»*.
- # — используется для указания «энного» ХХХ дня месяца. Например, значение «6#3» в поле дня недели означает «третья пятница месяца» (день 6 = пятница и «#3» = 3-й день в месяц). Другие примеры: «2#1» = первый понедельник месяца и «4#5» = пятая среда месяца. Примечание что если вы укажете «#5» и в месяце не будет 5 данного дня недели, то срабатывания не произойдет, что месяц.
Допустимые символы и названия месяцев и дней недели не чувствительны к регистру. ПН то же, что мон.
Примеры
Вот несколько полных примеров:
**Выражение** | **Значение** |
0 0 12 * * ? | Пожар в 12 часов (полдень) каждый день |
0 15 10 ? * * | Пожар в 10:15 каждый день |
0 15 10 * * ? | Пожар в 10:15 каждый день |
0 15 10 * * ? * | Пожар в 10:15 каждый день |
0 15 10 * * ? 2005 | Пожар в 10:15 каждый день в течение 2005 года |
0 * 14 * * ? | Срабатывать каждую минуту, начиная с 14:00 и заканчивая 14:59, каждый день |
0 0/5 14 * * ? | Срабатывать каждые 5 минут, начиная с 14:00 и заканчивая 14:55, каждый день |
0 0/5 14,18 * * ? | Срабатывать каждые 5 минут, начиная с 14:00 и заканчивая 14:55, И срабатывать каждые 5 минут минут с 18:00 до 18:55, ежедневно |
0 0-5 14 * * ? | Срабатывать каждую минуту, начиная с 14:00 и заканчивая 14:05, каждый день |
0 10,44 14 ? 3 СР | Пожар в 14:10 и в 14:44 каждую среду марта. |
0 15 10 ? * ПН-ПТ | Пожар в 10:15 каждый понедельник, вторник, среду, четверг и пятницу |
0 15 10 15 * ? | Пожар в 10:15 15 числа каждого месяца |
0 15 10 л * ? | Пожар в 10:15 в последний день каждого месяца |
0 15 10 Л-2 * ? | Пожар в 10:15 предпоследнего дня каждого месяца |
0 15 10 ? * 6л | Пожар в 10:15 в последнюю пятницу каждого месяца |
0 15 10 ? * 6л | Пожар в 10:15 в последнюю пятницу каждого месяца |
0 15 10 ? * 6л 2002-2005 | Пожар в 10:15 каждую последнюю пятницу каждого месяца в течение 2002 года, 2003, 2004 и 2005 |
0 15 10 ? * 6#3 | Пожар в 10:15 в третью пятницу каждого месяца |
0 0 12 1/5 * ? | Пожар в 12:00 (полдень) каждые 5 дней каждого месяца, начиная с первого числа месяц. |
0 11 11 11 11 ? | Fire каждое 11 ноября в 11:11. |
Обратите внимание на эффекты ‘?’ и «*» в полях «день недели» и «день месяца»!
Примечания
- Поддержка указания значения дня недели и дня месяца не завершена (в настоящее время необходимо использовать символ «?» в одном из этих полей).
- Будьте осторожны, устанавливая время включения между утренними часами, когда происходит переход на летнее время.
в вашем регионе (для регионов США это обычно час до и после 2:00, потому что время
сдвиг может привести к пропуску или повторению в зависимости от того, движется ли время назад или вперед. Вы можете найти
эта запись в Википедии поможет определить особенности вашего региона:
https://secure.wikimedia.org/wikipedia/en/wiki/Daylight_saving_time_around_the_world
Использование Cron — База знаний
Общий
VPS
Выделенный
WP Professional
WP Professional Plus
Задания Cron предназначены для выполнения задач в определенное время. Это может быть что угодно, от обслуживания сервера (обновлений), мониторинга, запланированных программных задач, таких как обновление статистики членства, и многое другое.
У каждого пользователя в системе есть собственный crontab, и хотя вы можете редактировать crontab других пользователей, если вы являетесь пользователем root, для целей этого руководства мы будем редактировать crontab только текущего пользователя.
Структура задания Cron
Для работы каждого задания требуется несколько элементов. Время запуска и какую работу выполнять. Два раздела разделены пробелом. Мы рекомендуем использовать для этого одну вкладку.
Вот пример записи на вкладке cron (задание).
0 5 * * * /root/backup.sh
Это задание каждый день в 5 утра запускает сценарий с именем /root/backup.sh
Первые 5 записей — это время запуска и иметь следующий формат.
a b c d e
0 5 * * *
a) минуты (0-60)
b) часы (0-23)
c) день месяца (1-31)
d) месяц (1-12)
e ) день недели (1-7)
Минуты
Значение минут может быть прямым целым числом, например 5 (что означает 5 минут после часа). Есть четыре других варианта запуска задания на основе минут. Каждую минуту: если вы хотите запускать cronjob каждую минуту, вы должны использовать подстановочный знак 9.1220 * . Однако, если вы хотите запускать его каждые x минут, вы должны использовать */x
, например, каждые 5 минут будет */5
или каждые 15 минут */15
. Следующий вариант — указать минуты, разделенные ,
, например 3,16,23,48
. Последний вариант — это диапазон минут: 1-10
означает запуск задачи каждую минуту в течение первых 10 минут каждого часа. Параметр диапазона в минутах не так удобен, как в часах, днях или месяцах.
Часы
Задания Cron используют 24-часовой формат времени.
Как и минуты, вы можете указать конкретный час, например, 4 для 4 утра, или подстановочный знак для каждого часа, который будет *
, каждые 3 часа, который будет */3
, или определенные часы, такие как 3, 7,14,21
. Вы также можете настроить его на почасовую работу, но только в рабочие часы, используя диапазон, в данном случае 8-17
.
День месяца
Это тоже самое, что и минуты, но с некоторыми важными ошибками, о которых вам нужно знать. Если вы хотите, чтобы задание cron выполнялось в последний день месяца, вы не можете просто использовать 31
. Задания Cron выполняют только прямые совпадения, поэтому 29, 30 и 31 февраля не будут работать. Кроме того, вы также должны знать, что вводите */2
в поле дня месяца, так как это может привести к неожиданным результатам. Помните, что вы также должны обрабатывать високосные годы. Это единственное поле, которое не имеет статического диапазона возможных значений и может вызвать у вас проблемы. Вы также можете использовать здесь диапазоны, такие как 1-7
, которые будут запускать задание только с 1 по 7 число каждого месяца.
Месяц
Это опять же как минуты, вы можете выбрать конкретный месяц. Например, для января это будет просто число 1
. Чтобы делать что-то ежеквартально, используйте */4
. Если вы хотите, чтобы это происходило в определенные месяцы, используйте, например, 2,5,9,11
, то есть февраль, май, сентябрь и ноябрь. это в месяце 1,2,3 и 4.
Комбинирование вариантов времени начала
Вот несколько примеров:
Если вы хотите, чтобы cronjob запускался каждую пятницу в 17:00 для сопоставления статистики за неделю, вы должны использовать 0 17 * * 5
, что означает 0 минут после 17 часов каждый день каждого месяца, но только в 5-й день недели (пятница).
Если вы хотите, чтобы cronjob запускался каждое утро в будние дни в 4 утра, вы должны использовать 0 4 * * 1-5
.
Если вы хотите, чтобы cronjob запускался каждые 15 минут, но только в рабочее время в будние дни, вы должны использовать */15 8-17 * * 1-5
, что означает каждые 15 минут с 8 до 17:00, но только с понедельника по пятницу.
Предупреждение
Если поле не *, оно создает исключение и запускается только в определенное время. Если у вас есть оба поля, влияющие на день запуска cron, то команда будет запущена, когда одно из них совпадет. Например, если установлено 0 4 1,14 * 5
. Это означает 04:00 1-го и 14-го числа каждого месяца ИЛИ по пятницам. Обратите внимание, что это операция ИЛИ, а не операция И. Таким образом, этот пример будет запускаться каждую пятницу месяца, а также 1-го и 14-го числа, независимо от того, пятница это или нет. Это относится только к дню месяца и дню недели. Все остальные результаты, конечно, И, а не ИЛИ.
Отправка результатов по электронной почте
Любой вывод ваших команд будет автоматически отправлен по электронной почте на имя пользователя crontab. Однако, если вы хотите отправить это, например, в свою учетную запись Gmail®, вы можете добавить следующую строку в качестве первой строки: MAILTO="[email protected]"
. Вы можете отправить его на несколько адресов, разделив получателей запятой. Не оставляйте пробелов после запятых, так как это будет считаться недействительным почтовым адресом. Если вы хотите остановить отправку всей электронной почты, вставьте строку MAILTO, но оставьте поле получателя пустым.
Краткие коды Cron
Существует ряд коротких кодов, которые избавят вас от необходимости вводить полную спецификацию рабочего времени. Это @ежегодно
@ежемесячно
@еженедельно
@ежедневно
@ежечасно
@перезагрузка
. Все они делают именно так, как вы себе представляете. @yearly
выполняется один раз в год в полночь 1 января. @Monthly
запускается в полночь первого дня каждого месяца. @hourly
запускается в 0 минут каждого часа каждый час. @reboot
запускается только после перезагрузки системы.
Примером этого является
@daily /root/backup.sh
Настройка задания Cron в командной строке
Вы также можете использовать встроенный диспетчер cron в Центре управления учетными записями.
Команда crontab
позволяет создавать, редактировать, перечислять и удалять задания cron. Опции команд: -l
и -r
. Запуск crontab -l
отобразит список ваших заданий cron на экране. Чтобы полностью удалить ваш crontab, используйте кронтаб -r
. Это опасно, так как полностью удалит ваш crontab.
Заключительные замечания
Чтобы узнать больше об использовании команды crontab, используйте man crontab
. Если вы хотите узнать больше о том, как настроить crontab, используйте man 5 crontab
.
a Полное руководство для начинающих 2022
ВПС
23 августа 2022 г.
Линас Л.
8 минут Чтение
Загрузить полную памятку по командам Linux
Выполнение одной и той же задачи снова и снова может быть довольно утомительным. Планирование заданий cron позволяет пользователям автоматизировать задачи на виртуальном частном сервере или в любой Unix-подобной операционной системе. Это экономит драгоценное время, позволяя пользователям сосредоточиться на других важных задачах.
В этом подробном руководстве для начинающих вы изучите основы заданий cron, включая их типы, синтаксис, специальные строки и разрешения. К концу этой статьи вы сможете использовать задания cron для более эффективного планирования задач.
Что такое задание Cron?
Cron — это служебная программа, которая позволяет пользователям вводить команды для многократного планирования задач в определенное время. Задачи, запланированные в cron, называются cron jobs . Пользователи могут определить, какую задачу они хотят автоматизировать и когда ее следует выполнять.
Cron — это демон — фоновый процесс, выполняющий неинтерактивные задания. В Windows вы можете быть знакомы с фоновыми процессами, такими как Services , которые работают аналогично демону cron.
Демон всегда бездействует, ожидая команды, запрашивающей выполнение определенной задачи. Команду можно ввести на любом компьютере в сети.
Файл cron — это простой текстовый файл, содержащий команды для периодического запуска в определенное время. Системная таблица cron или файл конфигурации crontab по умолчанию — /etc/crontab , расположенный в каталоге crontab /etc/cron.*/ .
Только системные администраторы могут редактировать системный файл crontab. Однако Unix-подобные операционные системы поддерживают несколько администраторов. Каждый может создать файл crontab и написать команды для выполнения заданий в любое время.
С помощью заданий cron пользователи могут автоматизировать обслуживание системы, мониторинг дискового пространства и планирование резервного копирования. Из-за своей природы задания cron отлично подходят для компьютеров, которые работают круглосуточно и без выходных, например серверов.
Хотя задания cron в основном используются системными администраторами, они могут быть полезны и веб-разработчикам.
Например, как администратор веб-сайта, вы можете настроить одно задание cron для автоматического резервного копирования вашего сайта каждый день в полночь, другое для проверки неработающих ссылок каждый понедельник в полночь и третье для очистки кеша сайта каждую пятницу в полдень. .
Однако, как и любая другая программа, cron имеет ограничения, которые следует учитывать перед использованием:
- Кратчайший интервал между заданиями составляет 60 секунд . С cron вы не сможете повторять задание каждые 59 секунд или меньше.
- Централизованно на одном компьютере. Задания Cron не могут быть распределены между несколькими компьютерами в сети. Поэтому, если компьютер, на котором запущен cron, выйдет из строя, запланированные задачи не будут выполняться, а пропущенные задачи можно будет запустить только вручную.
- Нет механизма автоматического повтора . Cron предназначен для запуска в строго определенное время. Если задача завершается с ошибкой, она не будет запускаться снова до следующего запланированного времени. Это делает cron непригодным для добавочных задач.
С учетом этих ограничений cron является отличным решением для простых задач, которые запускаются в определенное время с регулярными интервалами не менее 60 секунд.
Если вы хотите запланировать одноразовое задание на потом, вы можете использовать другой метод.
Профессиональный наконечник
Перед созданием задания Cron убедитесь, что ваш скрипт работает. Для этого откройте файл в браузере (по URL-адресу) или запустите его через SSH, в зависимости от того, какой тип скрипта у вас есть. Если ваш скрипт не работает, обратитесь за помощью к разработчикам.
Основные операции с заданиями Cron
В этом руководстве показано, как планировать задания cron путем ввода команд в программу-оболочку, такую как Bash, в Linux или другой Unix-подобной операционной системе.
VPS-хостинг от Hostinger работает под управлением операционной системы на базе Linux. Таким образом, изучение того, как планировать задания cron, значительно повысит эффективность вашей работы в качестве администратора VPS. Доступ к командной строке для VPS можно получить через PuTTY SSH.
Прежде чем приступить к основным операциям cron, важно знать различные файлы конфигурации заданий cron:
- Системный файл crontab. Используйте его для планирования общесистемных важных заданий, которые можно изменить только с привилегиями root.
- Пользователь crontab. Этот файл позволяет пользователям создавать и редактировать задания cron, которые применяются только на уровне пользователя.
Если вы хотите отредактировать системный crontab, убедитесь, что текущий пользователь имеет привилегии root.
Ниже приведены некоторые основные операции, которые может выполнять cron:
Чтобы создать или отредактировать файл crontab , введите в командной строке следующее:
crontab -e
system, команда автоматически создаст новую. crontab -e позволяет добавлять, редактировать и удалять задания cron.
Для редактирования файла crontab вам понадобится текстовый редактор, например vi или nano . При входе crontab -e в первый раз, вам будет предложено выбрать, в каком текстовом редакторе вы хотите редактировать файл.
Чтобы просмотреть список активных запланированных задач в вашей системе, введите следующую команду:
crontab -l
Если в вашей системе несколько пользователей, вы можете просмотреть их списки файлов crontab , введя следующее команда от имени суперпользователя:
crontab -u имя пользователя -l
Вы также можете легко отредактируйте запланированные задания других пользователей , введя следующую команду crontab:
sudo su crontab -u username -e
Некоторые команды, включая эту, могут выполняться только пользователями root.
Наконец, , чтобы удалить все запланированные задачи в файле crontab и начать заново, введите следующую команду:
crontab -r
В качестве альтернативы следующая команда аналогична crontab -r , за исключением того, что перед удалением crontab пользователю будет предложено выбрать вариант yes/no:
crontab -i
Пользователь root также может добавлять задания cron в каталог etc/cron.d . Он больше всего подходит для запуска скриптов автоматической установки и обновления.
Имейте в виду, что пользователь, добавляющий задания cron в этот каталог, должен иметь root-доступ и соответствовать соглашениям об именовании частей выполнения.
Кроме того, пользователь root может переместить свои сценарии в следующие каталоги, чтобы запланировать их выполнение:
- /etc/cron.hourly/ — Запускать все сценарии один раз в час
- /etc/cron. daily/ — Бегать раз в день.
- /etc/cron.weekly/ — Запускать раз в неделю.
- /etc/cron.monthly/ — Запускать раз в месяц.
Синтаксис Crontab
Чтобы создать задание cron, вам необходимо сначала понять синтаксис и форматирование cron. В противном случае правильная настройка заданий cron может оказаться невозможной.
Синтаксис crontab состоит из пяти полей со следующими возможными значениями:
- Минуты. Минута часа, в течение которого будет выполняться команда, в диапазоне от 0 до 59.
- Час. Час, в который будет выполняться команда, в диапазоне от 0 до 23 в 24-часовом формате.
- День месяца . День месяца, в который пользователь хочет запустить команду, в диапазоне от 1 до 31.
- Месяц . Месяц, в котором пользователь хочет, чтобы команда выполнялась, в диапазоне от 1 до 12, что соответствует январю-декабрю.
- День недели. День недели, в который должна выполняться команда, в диапазоне от 0 до 6, представляющий воскресенье-субботу. В некоторых системах значение 7 представляет воскресенье.
Не оставляйте поля пустыми.
Если, например, вы хотите настроить задание cron для запуска root/backup.sh каждую пятницу в 17:37, вот как должна выглядеть ваша команда cron:
37 17 * * 5 root /backup.sh
В приведенном выше примере 37 и 17 представляют 17:37. Обе звездочки для полей День месяца и Месяц обозначают все возможные значения. Это означает, что задача должна повторяться независимо от числа или месяца. Наконец, 5 представляет пятницу. Затем за набором чисел следует местоположение самой задачи.
Если вы не уверены в написании синтаксиса cron вручную, вы можете использовать бесплатные инструменты, такие как Crontab Generator или Crontab. guru, чтобы сгенерировать точные числа для времени и даты, которые вы хотите для своей команды.
Чтобы установить правильное время для команды cron, необходимо знать операторы заданий cron. Они позволяют вам указать, какие значения вы хотите ввести в каждое поле. Вам нужно использовать правильные операторы во всех файлах crontab.
- Звездочка (*) . Используйте этот оператор для обозначения всех возможных значений в поле. Например, если вы хотите, чтобы ваше задание cron выполнялось каждую минуту, напишите звездочку в поле Minute .
- Запятая (,) . Используйте этот оператор для перечисления нескольких значений. Например, написать 1,5 в поле День недели запланирует выполнение задачи каждый понедельник и пятницу.
- Дефис (-) . Используйте этот оператор для определения диапазона значений. Например, если вы хотите настроить задание cron с июня по сентябрь, напишите 6-9 в поле Month .
- Разделитель (/) . Используйте этот оператор для деления значения. Например, если вы хотите, чтобы скрипт запускался каждые двенадцать часов, напишите */12 в поле Hour .
- Последний (Л) . Этот оператор можно использовать в полях дня месяца и дня недели. Например, запись 3L в поле дня недели означает последнюю среду месяца.
- Рабочий день (З) . Используйте этот оператор, чтобы определить ближайший день недели от заданного времени. Например, если 1-е месяца приходится на субботу, запись 1W в поле дня месяца приведет к запуску команды в следующий понедельник ( 1W ).0007 3-й ).
- Хэш (#). Используйте этот оператор для определения дня недели, за которым следует число от 1 до 5. Например, 1#2 означает второй понедельник месяца.
- Знак вопроса (?) . Используйте этот оператор для ввода «нет конкретного значения» в поля «день месяца» и «день недели».
Специальные строки заданий Cron
Специальные строки используются для планирования заданий cron через временные интервалы, при этом пользователю не нужно вычислять логический набор чисел для ввода. Чтобы использовать их, напишите @ , за которым следует простая фраза.
Вот несколько полезных специальных строк, которые вы можете использовать в командах:
- @hourly . Задание будет выполняться раз в час.
- @ежедневно или @полночь . Эти строки будут запускать задачу каждый день в полночь.
- @еженедельно . Используйте это для запуска заданий раз в неделю в полночь в воскресенье.
- @ежемесячно. Эта специальная строка запускает команду один раз в первый день каждого месяца.
- @ежегодно . Используйте это, чтобы запускать задачу один раз в год в полночь 1 января.
- при перезагрузке . С этой строкой задание будет выполняться только один раз при запуске.
Важно! Не забывайте проявлять особую осторожность при планировании заданий cron, зависящих от часового пояса.
Примеры синтаксиса Cron
Теперь, когда вы знаете, как выглядит правильный синтаксис cron, мы рассмотрим несколько примеров, которые помогут вам лучше понять его.
Имейте в виду, что вывод cron будет автоматически отправлен на вашу локальную учетную запись электронной почты. Если вы хотите перестать получать электронные письма, вы можете добавить >/dev/null 2>&1 в команду, как в следующем примере:
0 5 * * * /root/backup.sh >/dev/null 2>&1
Если вы хотите отправить вывод на определенную учетную запись электронной почты, добавьте MAILTO , а затем адрес электронной почты. Вот пример:
MAILTO="[email protected]" 0 3 * * * /root/backup.sh >/dev/null 2>&1
Взгляните на следующие примеры команд, чтобы лучше понять синтаксис cron:
Пример | Пояснение |
0 0 * * 0 /root/backup.sh | Выполнять резервное копирование каждое воскресенье в полночь. |
0 * * * 1 /root/clearcache.sh | Очищать кеш каждый час по понедельникам. |
0 6,18 * * * /root/backup.sh | Резервное копирование данных два раза в день в 6 утра и 6 вечера. |
*/10 * * * * /scripts/monitor.sh | Выполнять мониторинг каждые 10 минут. |
*/15 * * * * /root/backup. sh | Выполнять резервное копирование каждые 15 минут. |
* * 20 7 * /root/backup.sh | Выполнять резервное копирование каждую минуту 20 июля. кеш каждый будний день (с понедельника по пятницу) в 22:00. |
0 0 * * 2 * /root/backup.sh | Выполняйте резервное копирование в полночь каждый вторник. |
* * * 1,2,5 * /scripts/monitor.sh | Выполнять мониторинг каждую минуту в течение января, февраля и мая. |
10-59/10 5 * * * /root/clearcache.sh | Очищать кэш каждые 10 минут в 5:00, начиная с 5:10. |
0 8 1 */3 * /home/user/script.sh | Запускайте задачу ежеквартально в 8 утра первого дня месяца. |
0 * * * * /root/backup.sh | Создавать резервную копию каждый час. |
* * * * * /scripts/script. sh; /scripts/scrit2.sh | Включить несколько задач в одно задание cron. Полезно для планирования одновременного запуска нескольких задач. |
@reboot /root/clearcache.sh | Очищать кеш при каждом включении системы. |
0 8 1-7 * 1 /scripts/script.sh | Запускать сценарий в первый понедельник каждого месяца в 8 утра. |
5 4 * * 0 /root/backup.sh | Создавайте резервную копию каждое воскресенье в 4:05. |
15 9 1,20 * * /scripts/monitor.sh | Выполнять мониторинг в 21:15 1-го и 20-го числа каждого месяца. |
@hourly /scripts/monitor.sh | Выполнять мониторинг каждый час. |
0 0 1,15 * 3 /скрипты/script.sh | Запускать сценарий в полночь каждую среду с 1 по 15 число каждого месяца. |
15 14 1 * * /root/clearcache. sh | Очищать кеш в первый день каждого месяца в 14:15. |
00 08-17 * * 1-5 bin/check-db-status | Проверять состояние базы данных каждый день с понедельника по пятницу каждый час с 8 до 17 часов. |
15 6 1 1 * /root/backup.sh | Выполняйте резервное копирование каждое 1 января в 6:15 утра. |
0 0 * * * /scripts/monitor.sh | Запускать сценарий мониторинга один раз в сутки в полночь. |
0 0 15 * * /root/clearcache.sh | Очищать кеш в полночь 15-го числа каждого месяца. |
* * * * 1,5 /scripts/monitor.sh | Выполнение мониторинга каждый понедельник и пятницу. |
Следующие два файла можно создать или отредактировать, чтобы разрешить или запретить пользователям использовать системный файл cron:
- /etc/cron. allow — если cron.allow существует, он должен содержать имя пользователя, чтобы разрешить им использовать задания cron.
- /etc/cron.deny — если cron.allow не существует, но cron.deny существует, пользователь, который хочет использовать задания cron, не должен быть указан в файле.
Настройка автоматически запланированных заданий — практичное решение, позволяющее не забывать о важных задачах.
Задания Cron — отличный способ для системных администраторов и веб-разработчиков управлять повторяющимися задачами. Все, что нужно сделать, это ввести правильные команды и выбрать правильное время выполнения.
Чтобы запланировать задание cron, используйте правильный синтаксис в командной строке. Кроме того, вы можете использовать специальные строки, чтобы упростить процесс. Не забудьте назначить соответствующие разрешения, чтобы только авторизованные пользователи могли получить доступ к файлу cron.
Если вы ищете специальное решение для WordPress, ознакомьтесь с нашим руководством по работе cron в WordPress.
Мы надеемся, что эта статья помогла вам понять основы использования заданий cron для планирования задач. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять их в разделе комментариев.
Линас начинал как агент по работе с клиентами, а сейчас является полнофункциональным веб-разработчиком и руководителем технической группы в Hostinger. Он увлечен тем, что предлагает людям первоклассные технические решения, но, несмотря на то, что ему нравится программировать, он втайне мечтает стать рок-звездой.
Другие работы Линаса Л.
Примеры Cron. Как написать расписание crontab… | Rakesh Jain
Как написать выражение расписания crontab для:
«Каждую минуту».
* * * * *
«Каждую 2-ю минуту».
*/2 * * * * *
Каждую ровную минуту
*/2 * * * *
на каждую 2 -ю минуту с 1 до 59.
1–59/2 * * * *
«Каждую 3-ю минуту».
*/3 * * * *
«Каждую 5-ю минуту».
*/5 * * * *
«Каждую 15-ю минуту»/e почти четверть часа
*/15 * * * *
*/30 * * * *
каждый час в 30 минут
30 * * * *
каждые 60 минут/ «В минуту 0»/ каждый час/каждый час
0 * * * *
каждый второй час/ 2-й час».
0 */2 * * *
каждые три часа/ «В 0-ю минуту после каждого 3-го часа».
0 */3 * * *
каждые 6 часов/ «В 0-ю минуту после каждого 6-го часа».
0 */6 * * *
каждые 12 часов/ «В 0-ю минуту после каждого 12-го часа».
0 */12 * * *
диапазон часов/ «В 0-й минуте каждого часа с 9 до 17».
0 9–17 * * *
между определенными часами/ «В 0-ю минуту каждого часа с 9 до 17».
0 9–17 * * *
каждый день/ ежедневно/один раз в день/каждую ночь/ каждую полночь/каждый день в полночь/каждую ночь в полночь/ «В 00:00».
0 0 * * *
каждый день в 1:00/ «В 01:00».
0 1 * * *
ежедневно 8:00/ «В 08:00».
0 8 * * *
каждое утро/ «В 09:00».
0 9 * * *
каждое воскресенье/ «В 00:00 в воскресенье».
0 0 * * ВС
каждый понедельник/ «В 00:00 в понедельник».
0 0 * * ПН
каждую пятницу в полночь/ «В 00:00 в пятницу».
0 0 * * FRI
каждый будний день/только будние дни/с понедельника по пятницу/ «В 00:00 каждый день недели с понедельника по пятницу».
0 0 * * 1–5
каждые выходные/только выходные/ «В 00:00 в субботу и воскресенье».
0 0 * * 6,0
каждые семь дней/еженедельно/каждую неделю/раз в неделю/ «В 00:00 в воскресенье».
0 0 * * 0
каждый месяц/ежемесячно/раз в месяц/ «В 00:00 дня месяца 1».
0 0 1 * *
каждый второй месяц/ «В 00:00 дня месяца 1 в каждом втором месяце».
0 0 1 */2 *
каждый квартал/ «В 00:00 дня месяца 1 в каждом 3-м месяце».
0 0 1 */3 *
каждые шесть месяцев/ «В 00:00 дня месяца 1 в каждом 6-м месяце».
0 0 1 */6 *
ежегодно/ «В 00:00 дня месяца 1 января».
0 0 1 1 *
Совет 1: Если часть дня месяца или дня недели начинается с со знаком *, они образуют пересечение . В противном случае они образуют союз .
* * 3 * 1 запускается 3-го числа месяца и в понедельник (объединение),
, тогда как * * */2 * 1 запускается каждый второй день месяца, только если это также понедельник (пересечение).
Совет 2: Запускайте серверы, включая процесс cron, в часовом поясе UTC. Почему?
Совет 3: Некоторые реализации cron позволяют указывать годы и секунды. Однако cron — не лучший инструмент, если вам нужно работать на этих уровнях, поэтому crontab.guru их не поддерживает.
Совет 4: Не используйте @reboot, потому что у него слишком много проблем.
Совет 5: Более сложные расписания можно реализовать, комбинируя несколько выражений cron. Например, если вам нужно запускать X каждые 90 минут, создайте одну запись crontab, которая запускает X каждые 3 часа в час (0 */3 * * *), и вторую запись crontab, которая запускает X каждые 3 часа со смещением (30 1/3 * * *).
Совет 6: Другой альтернативой для сложных графиков является Mcron.
- Выполнить сценарий оболочки полного резервного копирования (полное резервное копирование) 10 июня 08:30 .
M H DM M DW CMD
30 08 10 06 * /home/test/full-backup
- 30 –30-я минута
- 08 –08 утра
- 10 –10 -й день
- 06 –6 -й месяц (июнь)
- * — каждый день недельной. (инкрементное резервное копирование) в 11:00 и 16:00 каждый день
M H DM M DW CMD
00 11,16 * * * /home/test/bin/incremental-backup- 00 –0-я минута ( Начало часа)
- 11,16 –11:00 и 16:00
- * — Ежедневно
- * — Ежемесячно
- * — Ежедневно
3. проверять состояние базы данных ежедневно (включая выходные) в рабочее время с 9 до 6 p. m
M H DM M DW CMD
00 9–18 * * * /home/test/bin/check-db-status- 00 –0-я минута (начало часа)
- 09–088 –9, 10, 11, 12, 13, 14, 15, 16, 17, 18
- * — Каждый день
- * — Каждый месяц
- * — Каждый день недели
Просмотр записей Crontab текущего вошедшего пользователя, а также записей других пользователей
To 90 crontab -l из вашей учетной записи unix, как показано ниже.test@dev-db$ crontab -l
@yearly /home/test/annual-maintenance
*/10 * * * * /home/test/check-disk-space[ Примечание: Это отображает crontab текущего пользователя]root@dev-db# crontab -u test2 -l
@monthly /home/test2/monthly-backup
00 09-18 * * * /home/test2/check-db-statusРедактировать записи Crontab текущего вошедшего в систему пользователя и другие пользователя, а также
Чтобы отредактировать записи crontab, используйте crontab -e . По умолчанию это отредактирует crontab текущего вошедшего в систему пользователя.
test@dev-db$ crontab -e
@yearly /home/test/centos/bin/annual-maintenance
*/10 * * * * /home/test/debian/bin/check-disk-space
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C[ Примечание: Это откроет файл crontab в редакторе Vim для редактирования.
Обратите внимание, что cron создал временный файл /tmp/crontab.XX... ]Когда вы сохраняете указанный выше временный файл с помощью :wq, он сохраняет crontab и отображает следующее сообщение, указывающее, что crontab успешно изменен.
root@dev-db# crontab -u test2 -e
@monthly /home/test2/fedora/bin/monthly-backup
00 09-18 * * * /home/test2/ubuntu/bin/check- БД-статус
~
~
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83CПо умолчанию crontab отправляет вывод задания пользователю, запланировавшему задание. Если вы хотите перенаправить вывод конкретному пользователю, добавьте или обновите переменную MAIL в crontab, как показано ниже.