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

Убирайся

  1. Эта функция поддерживается как для системных, так и для пользовательских записей crontab.
  2. Вы должны убедиться, что он поддерживается / работает в вашем конкретном дистрибутиве и / или версии пакета 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. Выполняться каждую ночь в 1:00, программа: ls 

    0    1    *    *    *    ls 

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

     

  2. Выполнить программу ls по понедельникам: 

    0    1    *    *    1    ls

     

    То есть выполнять каждый раз, когда на часах 1 час и 0 минут и 1-ый день недели;

  3. Выполнять 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

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

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

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *