Cron reboot: Настройка Cron | Losst
Настройка Cron | Losst
Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути — настроить автоматически запуск нужного скрипта в нужное время.
Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.
Содержание статьи:
Как работает Cron?
Фактически, Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:
- /etc/cron.minutely — каждую минуту;
- /etc/cron.hourly — каждый час;
- /etc/cron.daily — каждый день;
- /etc/cron.weekly — каждую неделю;
- /etc/cron.monthly — каждый месяц.
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.
Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
crontab -e
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
crontab -l
Вы можете удалить все существующие задачи командой -r:
crontab -r
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:
* * * * * /usr/local/bin/serve
Далее, усложним, будем запускать каждый час, в нулевую минуту:
0 * * * * /usr/local/bin/serve
Еще дальше:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
0 0 * * * /usr/local/bin/serve
Если идти так дальше, то можно запускать в первый день каждого месяца:
0 0 1 * * /usr/local/bin/serve
Можно в любой день, например, 15 числа:
0 0 15 * * /usr/local/bin/serve
В первый день недели первого месяца года, 0 часов 0 минут:
0 0 * 1 0 /usr/local/bin/serve
Или в нулевой день недели каждого месяца:
0 0 * * 0 /usr/local/bin/serve
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
30 15 * * 2 /usr/local/bin/serve
Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:
30 15 * * sun /usr/local/bin/serve
Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:
0 7-19 * * * /usr/local/bin/serve
Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
5,35 16 * * * /usr/local/bin/serve
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:
*/10 * * * * /usr/local/bin/serve
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
- @reboot — при загрузке, только один раз;
- @yearly, @annually — раз год;
- @monthly — раз в месяц;
- @weekly — раз в неделю;
- @daily, @midnight — каждый день;
- @hourly — каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
@hourly /usr/local/bin/serve
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
sudo vi /etc/corn.daily/basckup
#!/bin/bash
……
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
Отладка работы
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
grep CRON /var/log/syslog
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
sudo run-paths /etc/cron.daily/
Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.
Выводы
В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
18 примеров команды crontab
Cron (Command Run ON) — утилита для автоматического запуска программ и скриптов на сервере в определённое время. Cron очень полезен для рутинных задач, таких как сканирование системы, ежедневное резервное копирование и т.д. Cron автоматически выполняет задания в бэкенде в указанное время. Управлять cron нужно с помощью crontab. В этой статье вы увидите 18 полезных примеров команды crontab.
Синтаксис Crontab
Crontab имеет шесть полей. 1-5 поля определяют дату и время исполнения. 6 поле используется для команды/скрипта. Синтаксис выглядит следующим образом:
- * — соответствует чему угодно
- День недели в другом формате: mon, tue, wed
- Месяц в другом формате: jan, feb, mar
- Несколько значений в поле: 1,5,7 или mon,fri
- Диапазон: 1-10 или 20-30 или sun-fri или feb-apr
- Несколько диапазонов: jan-mar,jul-sep
Как изменить расписание
Чтобы добавить или обновить задания в crontab, используйте команду ниже. Откроется текстовый файл с заданиями crontab, где их можно будет редактировать.
crontab -e
По умолчанию откроются задачи текущего пользователя. Для редактирования задач другого пользователя используйте команду:
crontab -u username -e
Как узнать список заданий Crontab
Для просмотра записей crontab текущего пользователя используйте команду:
crontab -l
Чтобы посмотреть список заданий другого пользователя, используйте -u:
crontab -u username -l
Примеры
1. Ежедневно в 2 часа ночи.
Это будет полезно для ежедневного резервного копирования.
0 2 * * * /bin/sh backup.sh
2. Дважды в день
Команда ниже будет выполняться в 5 утра и 5 вечера ежедневно.
0 5,17 * * * /scripts/script.sh
3. Каждую минуту
* * * * * /scripts/script.sh
4. Каждое воскресенье в 17:00
Пригодится для планирования еженедельных задач.
0 17 * * sun /scripts/script.sh
5. Каждые 10 минут
Если вы хотите запустить скрипт с интервалом в 10 минут, вы можете настроить его, как показано ниже. Может быть полезно для мониторинга.
*/10 * * * * /scripts/monitor.sh
6. Определенные месяцы
Иногда может понадобиться запланировать задачи только на некоторые месяцы. Ниже приведен пример скрипта, который будет запущен в январе, мае и августе.
* * * jan,may,aug * /script/script.sh
7. Определенные дни
Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.
0 17 * * sun,fri /script/script.sh
8. Первое воскресенье каждого месяца.
Запланировать выполнение сценария только в первое воскресенье невозможно по параметру времени, но мы можем использовать условие в полях команд, чтобы сделать это.
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh
9. Каждые четыре часа.
Если вы хотите запустить скрипт с интервалом в 4 часа:
0 */4 * * * /scripts/script.sh
10. Дважды в каждое воскресенье и понедельник.
Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:
0 4,17 * * sun,mon /scripts/script.sh
11. Несколько задач
Можно запланировать несколько задач в одной записи с помощью точки с запятой:
* * * * * /scripts/script.sh; /scripts/scrit2.sh
12. Ежегодно (@yearly)
@yearly равно «0 0 1 1 *». Задание будет выполняться в первую минуту каждого года. Можно отправить новогодние поздравления 🙂
@yearly /scripts/script.sh
13. Ежемесячно (@monthly)
@monthly равно «0 0 1 * *». Задание будет выполняться в первую минуту месяца.
@monthly /scripts/script.sh
14. Еженедельно (@weekly)
@weekly равно «0 0 1 * mon». Задание будет выполняться в первую минуту недели.
@weekly /bin/script.sh
15. Ежедневно (@daily)
@daily равно «0 0 * * *». Задание будет выполняться в первую минуту каждого дня.
@daily /scripts/script.sh
16. Ежечасно (@hourly).
@hourly равно «0 * * * *». Задание будет выполняться в первую минуту каждого часа.
@hourly /scripts/script.sh
17. Выполнение задач при перезагрузке системы (@reboot).
@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.
@reboot /scripts/script.sh
18. Отправка результатов заданий на электронную почту
Если вы хотите отправить вывод на почту, то это можно сделать, установив переменную MAIL, как показано ниже.
# crontab -l MAIL=bob 0 2 * * * /script/backup.sh
Cron — точно по расписанию.
В наших материалах посвященных Ubuntu Server время от времени затрагивается вопрос выполнения каких либо задач по расписанию. Чтобы не объяснять каждый раз одно и тоже мы решили создать данный материал, который должен помочь системным администраторам освоить и эффективно использовать планировщик задач в Linux.
В Ubuntu Server в качестве планировщика задач используется cron — планировщик с интерфейсом командной строки. Он является важной частью системы и начинает функционировать сразу после установки, исполняя различные системные задачи. Наша цель — поставить его себе на службу, тем более это не так сложно как кажется.
Предусмотрено два типа расписаний cron: пользовательское и системное. Отличаются они тем, что первое создается пользователями и исполняется с учетом пользовательских прав, второе используется в административных или системных целях и может быть запущено от имени любого пользователя.
Чтобы создать или изменить пользовательское расписание наберите команду:
crontab -e
При первом запуске утилита предложит выбрать редактор, мы рекомендуем выбирать mcedit (требует установленного mc), либо другой редактор, с которым вы умеете работать.
Формат строк расписания имеет вид:
минута час день месяц день_недели команда
- Минута — время в минутах от 0 до 59
- Час — от 0 до 23
- День — день месяца от 1 до 31
- Месяц — от 1 до 12 либо буквенные обозначения jan — dec
- День недели — от 0 до 6 (0 — воскресенье) или sat — sun
- Команда — строка в формате командного интерпретатора которая будет исполнена, допускается запись типа команда1 && команда2 для запуска нескольких команд подряд.
Значения минут, часов, дней можно указывать следующим образом:
- Значение — число обозначающее дату или время, допускается подстановочный знак * допускающий полный диапазон значений
- Несколько значений — допускается указывать несколько значений через запятую, например 2,14,22
- Диапазон значений — указывается через дефис, например 2-10
- Шаг значений — указывается через дробь, в знаменатель которой ставится шаг, например */3 — каждое третье значение 0, 3, 6, 9 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.
Рассмотрим следующий пример записи:
0 8-19/2 * * 1 /home/ivanov/test
Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге Иванова.
Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:
* 10-15 * * * /home/ivanov/test
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:
0 10-15 * * * /home/ivanov/test
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
Кроме даты можно использовать ряд специальных строк:
- @reboot — выполнять команду при перезагрузке
- @yearly или @annually — выполнять 1 января, аналогично записи: «0 0 1 1 * «
- @monthly — выполнять 1 числа каждого месяца, аналогично «0 0 1 * * «
- @weekly — выполнять каждое воскресенье, равносильно «0 0 * * 0«
- @daily или @midnight — ежедневно в полночь,»0 0 * * * «
- @hourly — раз в час, «0 * * * * «
Так для ежедневного исполнения нашего скрипта каждую полночь можно написать:
@midnight /home/ivanov/test
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.
Для системных и административных задач предусмотрен файл /etc/crontab синтаксис записей в нем отличается наличием дополнительного значения — пользователя, от чьего имени будет запущено задание:
минута час день месяц день_недели пользователь команда
Пример такой записи:
0 19 * * 1-5 root /etc/backup
Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт /etc/backup от имени пользователя root.
Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.
Как видим cron достаточно прост в использовании, но в тоже время предоставляет богатые возможности по настройке расписаний в Ubuntu Server. Надеемся данная статья поможет администраторам освоить данный инструмент.
Crontab Примеры: Запуск Cron Заданий в Linux
В Linux мы можем настраивать выполнение регулярной задачи, также известной как cron задание, с помощью сервиса cron
(crond
).
Сервис cron
(crond
), читает crontab
(таблицы cron-а) и выполняет запланированные задания.
В данной статье я покажу формат crontab
и объясню как планировать запуск команд или скриптов в Linux.
Вы также найдете здесь такие распространенные примеры расписаний в crontab
, как запуск команды или скрипта каждую минуту, каждые 5 минут, каждый час, каждый день и многие другие.
Первым делом необходимо убедиться, что сервис cron
(crond
) запущен.
Узнать запущен ли сервис cron
в Ubuntu:
systemctl status cron.service
— или —
service cron status
Узнать запущен ли сервис crond
в CentOS:
systemctl status crond.service
— или —
service crond status
Также необходимо убедиться в том, что сервис cron
(crond
) будет запущен при старте системы.
Дельный Совет: Не знаете как добавит сервис в автозагрузку в Ubuntu или CentOS? Это легко! Читать далее →
Как только сервис cron
(crond
) запущен и стоит в автозагрузке — вы можете запланировать cron задание.
Настройка Crontab
Выполните следующую команду чтобы открыть crontab
текущего пользователя:
$ crontab -e
Открыть crontab
пользователя Alice:
$ crontab -u alice -e
Просмотреть содержимое crontab
текущего пользователя и пользователя Alice:
$ crontab -l $ crontab -u alice -l
Полезная Информация: По умолчанию, пользовательские задания для планировщика cron хранятся в директории /var/spool/cron/
.
Формат Планирования Заданий в Сrontab
Каждое запланированное задание описывается одной строкой и определяет время начала выполнения задания и само cron задание (команда или скрипт) которое будет выполнено.
Чтобы задать время, можно использовать конкретное значение минуты, часа, дня месяца, месяца и дня недели.
Вместо конкретных значений можно использовать символ *
, который буде означать ВСЕ
значения или КАЖДОЕ
из значений.
Схема для лучшего понимания формата crontab
:
.---------------- минута (0 - 59) | .-------------- час (0 - 23) | | .------------ день месяца (1 - 31) | | | .---------- месяц (1 - 12) ИЛИ jan,feb,mar ... | | | | .-------- день недели (0 - 6) (Воскресенье=0 или 7) ИЛИ sun,mon,tue ... | | | | | * * * * * команда для выполнения
Временная метка может быть целым значением, несколькими значениями, диапазоном, дробью или дробным диапазоном.
Примеры временных меток для колонки час:
Значение | Тип | Описание |
---|---|---|
9 | Целое значение | Выполнять в 9am |
6,7,10 | Несколько значений | Выполнять в 6, 7 и 10am |
6-9 | Диапазон | Выполнять каждый час между 6-9 AM (включительно) |
*/2 | Дробь | Выполнять каждый 2-ой час, т.е. 0 (полночь), 2am, 4am, 6am, и т.д. |
3-12/3 | Дробный диапазоном | Выполнять каждый 3-ий час между 3am и 12pm, т.е. 3am, 6am, 9am, 12pm |
Дельный Совет: Хотите стать DevOps инженером? Тогда вы обязаны знать Git! Это статья поможет реально быстро освоить основы Git! Читать далее →
Существует насколько предопределенных значений, которыми можно заменять время выполнения задания:
Значение | Описание | Эквивалент |
---|---|---|
@reboot | Выполнять при загрузке операционной системы | — |
@yearly | Выполнять ежегодно в полночь 1-го января | 0 0 1 1 * |
@annually | Выполнять ежегодно в полночь 1-го января | 0 0 1 1 * |
@monthly | Выполнять ежемесячно в полночь 1-го числа | 0 0 1 * * |
@weekly | Выполнять в полночь каждый понедельник | 0 0 * * 0 |
@daily | Выполнять ежедневно в полночь | 0 0 * * * |
@midnight | Выполнять ежедневно в полночь | 0 0 * * * |
@hourly | Выполнять в начале каждого часа | 0 * * * * |
Примеры Crontab
В конце этого поста я бы хотел представить несколько полезных примеров расписаний запуска cron заданий.
Я просматриваю эти примера практически каждый раз, когда необходимо добавить в crontab
какую-то команду или скрипт.
Эта таблица мне очень помогает и надеюсь поможет вам.
Вот самые распространенные примеры расписаний cron заданий, которые могут быть найдены практически в любом crontab
в Linux:
Рассписание | Задание |
---|---|
* * * * * | echo «Запуск cron задания каждую минуту» |
*/5 * * * * | echo «Запуск cron задание каждые 5 минут» |
*/30 * * * * | echo «Запуск cron задания каждые 30 минут» |
0 * * * * | echo «Запуск cron задания каждый час» |
0 */3 * * * | echo «Запуск cron задания каждые 3 часа» |
0 13 * * * | echo «Запуск cron задания каждый день в 13:00» |
30 2 * * * | echo «Запуск cron задания каждый день в 2:30» |
0 0 * * * | echo «Выполнять задание каждый день в полночь» |
0 0 * * 0 | echo «Запуск cron задания каждое Воскресенье» |
0 0 * * 1 | echo «Запуск cron задания каждый Понедельник» |
0 0 1 * * | echo «Запуск cron задания в первый день каждого месяца» |
0 0 1 1 * | echo «Запуск cron задания каждый год первого Января» |
@reboot crontab работает только для root?
Это может быть немного запутанной темой, потому что существуют разные реализации cron. Также было несколько ошибок, которые нарушали эту функцию, и есть также некоторые случаи использования, когда она просто не будет работать, особенно если вы выполняете выключение / загрузку вместо перезагрузки.
ошибки
дата № 1
Здесь описана одна такая ошибка в Debian под названием: cron: @reboot задания не выполняются . Похоже, это пробило себя и в Ubuntu, что я не могу подтвердить напрямую
дата № 2
Доказательство ошибки в Ubuntu, похоже, подтверждается здесь в этом SO Q & A под названием: @reboot cronjob не выполняется .
выдержка
комментарий №1: …. 3) ваша версия crond может не поддерживать @reboot вы используете vron’s crond? … показать результаты пользователя crontab -l -u
комментарий № 2: … Возможно, было бы неплохо установить его в качестве сценария инициализации, а не полагаться на конкретную версию @reboot cron.
комментарий № 3: … @MarkRoberts удалил перезагрузку и изменил 1 * * * *, чтобы * / 1 * * * *, проблема решена! Куда мне отправлять респ птс марки? Спасибо!
Принятый ответ в этом Q & A также имел этот комментарий:
Мне кажется, Lubuntu не поддерживает синтаксис @Reboot Cron.
Дополнительные доказательства
дата № 3
В качестве дополнительного доказательства была эта тема, что кто-то пытался сделать то же самое и разочаровывался, что это не сработало Это называется: Тема: Cron — задания @reboot не работают .
выдержка
Re: Cron — задания @reboot не работают
Цитата Сообщение от ceallred Посмотреть сообщение Это убивает меня … Попробовал скрипт оболочки. При запуске вручную создается файл журнала … перезагрузка, и задание не запускается или не создает файл журнала.
Системный журнал показывает, что CRON выполнил задание … но, опять же, нет вывода, и процесс не запущен. 15 июля, 20:07:45 RavenWing cron [1026]: (CRON) INFO (Запуск заданий @reboot) 15 июля, 20:07:45 RavenWing CRON [1053]: (ceallred) CMD (/ home / ceallred / Scripts / run_spideroak. sh> /home/ceallred/Scripts/SpiderOak.log 2> & 1 &)
Кажется, что cron не нравится команда @reboot …. Есть еще идеи?
Хорошо … Частично решено. Я отмечу это как решенное и начну новую тему с новой проблемой …..
Я думаю, что ответом было то, что мой зашифрованный домашний каталог не был смонтирован, когда CRON пытался запустить скрипт (хранится в / home / username / scripts). Перемещено в / usr / scripts, и задание выполняется должным образом.
Так что теперь это, кажется, проблема spideroak. Процесс запускается, но к тому моменту, когда процесс загрузки завершается, его уже нет. Я предполагаю сбой по какой-то причине …. Новая тема, чтобы спросить об этом.
Спасибо за помощь!
Как только этот пользователь выяснил свою проблему, он смог @reboot
работать с записью crontab пользователя.
Я не совсем уверен, какая версия cron используется в Ubuntu, но, похоже, это указывает на то, что пользователь тоже может использовать эту версию @reboot
или что ошибка была исправлена в какой-то момент в последующих версиях cron.
дата № 4
Я протестировал на CentOS 6 следующее, и это сработало.
пример
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
Затем я перезагрузил систему.
$ sudo reboot
После перезагрузки.
$ cat reboot.txt
hi
Убирайся
- Эта функция поддерживается как для системных, так и для пользовательских записей crontab.
- Вы должны убедиться, что он поддерживается / работает в вашем конкретном дистрибутиве и / или версии пакета cron.
Чтобы узнать больше о том, как работает настоящий механизм, @reboot
я наткнулся на этот пост в блоге, в котором обсуждаются внутренности. Он называется: @reboot — объясняет простую магию крона .
Отладка crond
Вы можете увеличить детализацию crond
, добавив следующее в этот файл конфигурации на дистрибутивах на основе RHEL / CentOS / Fedora.
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
Допустимые уровни: 0, 1 или 2. Чтобы вернуть этот файл к уровню ведения журнала по умолчанию, просто удалите его, "-L 2"
когда закончите отладку ситуации.
Настройка планировщика задач Cron в CentOS Linux
Cron — это планировщик задач, работающий в Unix-подобных операционных системах, включая все дистрибутивы Linux. Демон cron работает на сервере в фоновом режиме и запускает по расписанию запланированные задачи. В этой статье мы рассмотрим установку cron на сервер с Linux CentOS 8, познакомимся с синтаксисом cron, научимся добавлять в него различные задачи, управлять расписанием запуска.
Установка cron в Linux
По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:
# dnf update -y
— обновить все ПО на сервере
# dnf install crontabs -y
— установите cron
В моем случае cron уже был установлен:
После установки, демон crond нужно добавить в автозагрузку и запустить:
# systemctl enable crond.service
# systemctl start crond.service
Crontab: добавление задания в планировщик cron
Для добавления задач в cron можно использовать команду:
# crontab -e
Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это vi, но можно изменить на удобный для вас, например nano). Настройка заданий таким способом исключает, что вы допустите ошибку в синтаксисе. Редактор crontab просто не даст сохранить файл с ошибками.
Также можно отредактировать файл заданий cron вручную через mc:
# mcedit /var/spool/cron/root
– имя файла может отличаться, в зависимости от того, под каким пользователем вы работаете.
Чтобы добавить простое задание по запуск bash скрипта в cron, выполните:
# crontab -e
Теперь добавьте расписание задания и путь к файлу скрипта:
* * * * * /root/test.sh
Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).
Если все сделали верно, ваше задание будет добавлено. Чтобы вывести список заданий cron, выполните:
# cat /var/spool/cron/root
* * * * * /root/test.sh
Или так:
# crontab -l
Данный скрипт будет запускаться через cron ежеминутно.
Минимальное время – 1 минута. Демон cron просматривает список заданий один раз в минуту. Просматриваются следующие файлы и каталог:
/etc/crontab /etc/cron.*/. /var/spool/cron/
Каждая запись расписания crontab состоит из 5 полей:
минуты часы день_месяца месяцы день_недели
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
Можно использовать следующие допустимые значения для каждого из полей:
Поле | Диапазон значений |
минуты | 0-59 |
часы | 0-23 |
день месяца | 1-31 |
месяц | 1-12 или jan feb mar apr may jun jul aug sep oct nov dec |
день недели | 0-6 (где 0 это воскресение) или sun mon tue wed thu fri sat |
Знак * означает все допустимые значения. Пример задания:
15 00 * * 1 /root/test.sh
Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:
Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:
15 * * * * 30 * * * *
Или исползовать более короткий синтаксис с запятой:
15,30 * * * *
Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:
* */2 * * *
Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:
0-10 * * * * 50-60 * * * *
Еще несколько примеров расписаний для cron:
- запуск по будням в 12:00 и 18:00:
0 12,18 * * 1-5
- каждые 30 минут:
*/30 * * * *
- каждую субботу:
0 0 * * 6
- каждый вторник и четверг в 2:00 ночи:
0 2 * * 2,4
Еще в cron можно использовать специальные переменные.
Переменная | Описание | Эквивалент |
@reboot | Запускается один раз при загрузке | |
@yearly или @annually
| один раз в год | 0 0 1 1 * |
@monthly | один раз в месяц | 0 0 1 * * |
@weekly | один раз в неделю | 0 0 * * 0 |
@daily | один раз в день | 0 0 * * * |
@hourly | ежечасно | 0 * * * * |
@midnight | В полночь |
Т.е. для запуска задания раз в день можно использовать формат:
@daily echo "Проверка cron"
Можно отредактировать cron файл другого пользователя:
# crontab -u username
Отправка уведомлений cron на e-mail
Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.
Для отправки почты на сервере дожен быть установлен почтовый-агент. Для теста, я установил на сервер sendmail:
# dnf install sendmail -y
# service sendmail start
sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.
Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:
MAILTO="*@gmail.com" SHELL=/bin/bash HOME=/ * * * * * echo "Проверка cron"
MAILTO — укажите свой почтовый ящик
SHELL — оболочка пользователя
HOME — путь к файлу cron
После каждого запуска задачи на указанный email отправляется уведомление:
Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:
* * * * * echo "Проверка cron" >> /var/log/admin/journal.log
Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:
* * * * * echo "Проверка cron" >> /dev/null 2>&1
Таким образом вы можете отделить некоторые задания, чтобы не отправлять уведомления о всех задания себе на почтовый ящик.
Файлы конфигурации и логи планировщика cron
Основной файл конфигурации демона cron — /etc/crontab. Помимо cron-файла, задачи можно запускать из следующих директорий:
- /etc/cron.daily – запуск скриптов один раз в день
- /etc/cron.hourly – запуск скриптов ежечасно
- /etc/cron.monthly – запуск скриптов раз в месяц
- /etc/cron.weekly – запуск скриптов раз в неделю
Просто разместите нужны скрипты в нужную директорию, и они будут выполняться согласно расписания.
Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.
В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.
Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:
Планировщик процессов cron и файлы crontab
После ознакомления статей по работе с процессами (работа с top, утилита ps, уничтожение процессов, приоритет процессов), следует изучить и средства планирования задач.
Я считаю, что для администратора знать это – очень важно. Многие процессы можно автоматизировать, если есть базовые знания работы в FreeBSD и программирования на языке оболочки.
Зачем планировать задачи?
- Проверять защиту;
- Обновлять состояние системы;
- Обновлять базы данных;
- Делать резервное копирование;
- Очищать журнальные файлы и т.д.
Преимущество FreeBSD в том, что планировщик представляет собой отдельный демон, который может выполнять любую задачу, которую администратор сможет выразить алгоритмически.
Планировщик CRON
В FreeBSD, как и в большинстве систем типа UNIX, планировщик имеет имя cron. Как автономный демон, она работает постоянно и ежеминутно проверяет свои входные файлы (crontab), чтобы узнать, были ли они модифицированны или содержат задачу, которую нужно выполнить в данную минуту.
Сам процесс cron не нужно перезапускать, он автоматически прочитает любые изменения во время своего ежеминутного пробуждения.
Файлы CRONTAB
Глобальный файл crontab (/etc/crontab) содержит запланированные задания, выполняемые системой, а специальный каталог (/var/cron/tabs) позволяет отдельным пользователям создавать свои собственные файлы очереди crontab.
По возможности, лучше не редактировать файл /etc/crontab, а создавать индивидуальные файлы очереди. Каждый файл crontab помещается в определённый каталог /var/cron/tabs и принадлежит своему создателю с полномочиями 0600, механизм безопасности разрешит пользователю создавать и редактировать только собственные файлы, не компрометируя файлы других пользователей. Этим механизмом является утилита crontab:
# crontab -e
crontab работает посредством вызова редактора, указанного в переменной окружения VISUAL (или в переменной EDITOR, если VISUAL не задана). В редакторе появляется содержимое файла (за исключением первых трёх строк комментария).
После того, как мы заполнили файл в соответствии с нашими условиями, сохраняем и закрываем его. Временный файл, который во время внесения изменений находился в каталоге /tmp, скопируется в каталог /var/cron/tabs, и в него добавятся строки заголовка. Файл будет активизирован при следующем обращении cron, т.е. максимум – через минуту.
Файл crontab в общем виде состоит из шести полей:
“минуты” “часы” “число месяца” “месяц” “день недели” “команда”
Диапазон значений даты и времени в файлах crontab:
Поле | Допустимые значения |
минуты | 0-59 |
часы | 0-23 |
число месяца | 1-31 |
месяц | 1-12 |
день недели | 0-7 (воскресенье – это 0) |
Примеры задач:
- Выполняться каждую ночь в 1:00, программа: ls
0 1 * * * ls
То есть выполнять ls каждый раз, когда на часах 1 час и 0 минут.
- Выполнить программу ls по понедельникам:
0 1 * * 1 ls
То есть выполнять каждый раз, когда на часах 1 час и 0 минут и 1-ый день недели;
- Выполнять ls каждый час, в течении апреля:
0 * * 4 * ls
То есть выполнять каждый раз, когда на часах 0 минут и дата – 4-ый месяц.
Как вы уже поняли из синтаксиса, символ * – означает любое значение из интервала. В полях месяца и дня недели могут быть использованы и символические имена (трёхбуквенные сокращения, например jan, mon – январь, понедельник). Кроме этого, значения могут быть перечисленны через запятую, но без указания диапазона.
Если нужно выполнять программу каждые N интервалов, то можно определить шаговое значение */N. Например, если нужно выполнять программу каждые 10 минут, то:
0,10,20,30,40,50 * * * * ls
эквивалентно
*/10 * * * * ls
Существуют также строки сокращения:
Строка | Эквивалент |
@reboot | Выполняется один раз во время запуска системы |
@yearly | 0 0 1 1 * |
@annually | аналогично @yearly |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@midnight | аналогично @daily |
@hourly | 0 * * * * |
Пример:
Напишем простенький скрипт для командной оболочки:
#! /bin/sh
date >> log.txt
Этот скрипт дописывает в конец файла log.txt текущую дату и время.
Теперь выполним команду:
# crontab -e
которая откроет редактор временного файла crontab.
Скрипт будем выполнять каждую минуту, пропишем путь до нашего скрипта.
А теперь командой cat log.txt будем периодически прочитывать файл, и увидим, что скрипт выполняется каждую минуту:
P.S. Оу, надо бы системное время перевести на виртуальной машине ))
linux — @reboot не работает в CRON
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
OpenWrt Project: Cron и crontab
В этой статье используется следующее:
Cron позволяет запускать задания (программы, скрипты) в указанное время.
OpenWrt по умолчанию поставляется с системой cron, предоставляемой busybox.
Добавление и редактирование заданий cron
Вы можете редактировать текущую конфигурацию с помощью:
crontab -e
Это откроет файл / etc / crontabs / root
в редакторе vi
.См. Подробности в руководстве по редактированию.
В последней строке файла crontab должен быть символ конца строки.
Если сомневаетесь, просто оставьте в конце пустую строку.
Чтобы увидеть текущий crontab:
crontab -l
Хотя cron запускается при загрузке, он может немедленно завершиться, если нет crontab, поэтому, если вы добавляете свое первое задание cron, вам может потребоваться перезагрузка или запуск crond вручную.
/ usr / sbin / crond -f -c / etc / crontabs -l 8
Техническое задание
Каждая строка — это отдельная задача, прописанная в спецификации:
* * * * * команда для выполнения - - - - - | | | | | | | | | ----- День недели (0-6) (воскресенье = 0) | | | ------- Месяц (1 - 12) | | --------- День (1-31) | ----------- Час (0 - 23) ------------- Минуты (0-59)
Примеры указания времени:
мин 0-59 | час 0-23 | день / месяц 1-31 | месяц 1-12 | день / неделя 0-6 | Описание |
---|---|---|---|---|---|
* / 5 | * | * | * | * | Каждые 5 минут |
12 | * / 3 | * | * | * | Каждые 3 часа через 12 минут |
57 | 11 | 15 | 1,6,12 | * | В 11:57 15 января, июня и декабря |
25 | 6 | * | * | 1-5 | В 6:25 каждый будний день (пн-пт) |
0 | 0 | 4,12,26 | * | * | В полночь 4, 12 и 26 числа каждого месяца |
5,10 | 9,14 | 10 | * | 0,4 | В 9:05, 9:10, 14:05 и 14:10 каждое воскресенье и четверг |
0 (ноль) рассматривается как воскресенье.Если вы установите день недели на 7, busybox сойдет с ума и будет запускать вашу команду каждый день.
Поиск и устранение неисправностей
Вы можете читать сообщения журнала с помощью:
logread -e cron
Не все сообщения записываются в журнал, чтобы увеличить количество изменений в журнале, измените свойство cronloglevel
в / etc / config / system.
Дополнительно
Список литературы
Периодическая перезагрузка
Простое решение некоторых трудно решаемых проблем (утечка памяти, снижение производительности и т. Д.) — периодически перезагружать маршрутизатор, например, каждую ночь.
Однако это не так просто, как кажется, потому что маршрутизатор обычно не имеет часов реального времени.
Это могло привести к бесконечному циклу перезагрузок.
В процессе загрузки часы изначально устанавливаются на sysfixtime
на самую последнюю временную метку любого файла, найденного в / etc.
Самый последний файл, возможно, представляет собой файл состояния или файл конфигурации, измененный за 30 секунд до перезагрузки, инициированной cron.
Таким образом, в процессе загрузки часы переводятся на несколько секунд назад до отметки времени этого файла.Затем запускается cron и через несколько секунд замечает, что нужный момент загрузки снова наступил, и снова перезагружается …
(В конце процесса загрузки запускается ntpd, и может пройти некоторое время, прежде чем ntpd получит и установит правильное время, поэтому cron может начать перезагрузку между ними.)
Одним из решений для cron является использование задержки и касание файла в / etc
перед перезагрузкой.
# Перезагрузка в 4:30 каждый день # Примечание: чтобы избежать бесконечного цикла перезагрузки, подождите 70 секунд. # и коснитесь файла в / etc, чтобы установить часы # правильно до 4:31 при перезагрузке перед запуском cron.30 4 * * * сон 70 && коснитесь / etc / banner && reboot
На многих платформах отключение
не работает; он просто остановит процессор, но не выключит устройство.
Обычно нет программируемой схемы для фактического отключения устройства.
reboot
действительно работает, если вы хотите периодически перезагружать маршрутизатор.
Однако более гибкий подход — использовать пакет watchcat.
обновление opkg opkg установить watchcat luci-app-watchcat
Периодический перезапуск сети
Простое решение для перезапуска всей вашей сети (LAN, WAN и Wi-Fi) каждые 10 минут:
* / 10 * * * * / etc / init.д / перезапуск сети
Будильник
Если у вас есть летнее время, вы можете написать себе хороший будильник
Когда в Центральной Европе начинается летнее время, часы переводятся с 02:00 CET до 03:00 CEST в последнее воскресенье марта.
За шесть дней до этого вы можете заставить WOL разбудить вас на 10 минут раньше.
Позже не получится, ты опоздаешь
Когда в Центральной Европе заканчивается летнее время, часы переводятся с 03:00 CEST до 02:00 CET в последнее воскресенье октября.
# минутный час день месяц dayofweek команда 59 05 * * 1 / usr / bin / wol -h 192.168.1.255 хх: хх: хх: хх: хх: хх # Мо #crontab должен (как fstab) заканчиваться последней строкой как пробелом или комментарием
Этот веб-сайт использует файлы cookie. Используя веб-сайт, вы соглашаетесь с хранением файлов cookie на вашем компьютере. Также вы подтверждаете, что прочитали и поняли нашу Политику конфиденциальности. Если вы не согласны, покиньте сайт.OKПодробнее о файлах cookie
документов / guide-user / base-system / cron.txt · Последнее изменение: 01.09.2020 18:32 автор vgaetera
.