Cron

Введение

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

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

Формат cronjob-выражения

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

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

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

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

Выбирайте на своё усмотрение. Вот так изначально выглядит crontab-файл:

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

Чтобы изменить crontab-файл другого пользователя (например, ostechnix):

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

  1. Чтобы выполнять команду каждую минуту, задание должно быть такое:

  2. Похожее задание, только команда будет вызываться каждые пять минут:

  3. Вызывать команду 4 раза в час (каждые 15 минут):

  4. Чтобы выполнить команду каждый час в 30 минут, пишем:

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

  5. Значения времени можно комбинировать, перечислив их через запятую. Следующий код будет выполнять команду три раза в час: в 0, 5 и 10 минут.

  6. Выполнять команду каждый час будет следующее задание:

  7. Выполнение команды каждые два часа:

  8. Чтобы выполнять команду каждый день (в 00:00):

  9. Выполнение команды каждый день в 03:00:

  10. Выполнение команды каждое воскресенье (sunday):

  11. Другой вариант задания, которое будет выполнять команду каждое воскресенье (естественно, тоже в 00:00):

  12. Выполнение команды каждый день с понедельника по пятницу:

  13. Следующее задание будет выполнять команду каждый месяц, 1-го числа в 00:00:

  14. Выполнять команду в 16:15 каждого первого числа месяца будет это задание:

  15. Выполнение команды каждые три месяца:

  16. Выполнение команды в строго определённое время и месяц:

  17. Задание будет вызывать команду в начале каждого полугодия (в 00:00 1-го дня):

  18. Выполнение команды каждый год 1-го января в 00:00:

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

  • — одиночное выполнение команды при загрузке;
  • — раз в год;
  • — тоже раз в год;
  • — раз в месяц;
  • — один раз в неделю;
  • —  раз в день;
  • — тоже раз в день;
  • — раз в час.

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

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

Чтобы узнать о подробностях, есть команда:

Вышеперечисленного уже должно хватить для базовой работы с Cron и составления заданий.

Особенности

Поверх форт-системы, в числе прочего, в nnCron реализован простой DSL, обратно совместимый с cron-форматом. Программа может работать под управлением текстовых кронтаб-файлов. Имеется GUI-оболочка из которой можно удалять/добавлять/редактировать/планировать и запускать задачи, менять настройки программы. При написании заданий вы можете использовать все возможности форт-системы, что делает nnCron чрезвычайно гибким и расширяемым.

nnCron способен запускать в указанное время программы (в том числе как сервисы и/или от имени указанных пользователей), открывать документы и выводить сообщения-«напоминалки», прерывать работу любых запущенных процессов а также:

  • выключать или «усыплять» компьютер, а также «будить» его для запуска задачи;
  • управлять указанными окнами: отображать/скрывать/закрывать/удалять/сворачивать/разворачивать и прятать в системный трей;
  • выводить на экран и в лог-файл различные сообщения, делать запросы к пользователю на выполнение тех или иных действий;
  • работать с буфером обмена, файлами и реестром;
  • эмулировать ввод с клавиатуры и операции с мышкой;
  • звонить и класть трубку;
  • воспроизводить аудиофайлы, а также звуки заданной продолжительности и частоты через встроенный динамик (см. beep);
  • синхронизировать системное время по NTP;
  • запускать JScript и VBScript-сценарии;

Вышеперечисленные задачи могут также запускаться при возникновении определенных событий — например, при старте системы, изменении каталога (или файла), запуске/завершении определенного процесса, нажатии клавиатурной комбинации, создании определенного окна, вставке компакт-диска в привод и др. Возможен запуск одной задачи из другой задачи, правда тут уже без самостоятельного написания соответствующего скрипта не обойтись.

Дополнительные возможности могут быть добавлены путём подключения плагинов, написанных на SP-Forth.

Программа имеет так называемый «непотопляемый режим», позволяющий ей автоматически перезапускаться в случае фатальных ошибок. Это достигается путём запуска дополнительной службы/процесса nnguard.exe.

nnCron позволяет не только выполнять некоторые действия в определённые моменты времени, но и отслеживать файлы, флаги, окна, процессы, движения мыши, время простоя компьютера, горячие клавиши, выход в онлайн/офлайн, появление диска в дисководе, наличие хоста в сети (пинг), количество свободного места на диске и т. д.

Создание напоминаний и задач.

&nbsp &nbsp Данные о создаваемых для планировщика задачах и напоминаниях, по умолчанию, сохраняются в файле nncron.tab каталога планировщика (.\Program Files\nnCron). Записи задач могут быть представлены в классическом режиме или расширенном .

Классический режим соответствует формату кронтаб-файлов Unix-систем и представляет собой строку, содержащую время в крон-формате и через пробел – команду. Пустые строки и строки, начинающиеся с символа # , не обрабатываются (кроме конструкции #( ) .

# Minutes Hours Days Months WeekDays Command */15 8-16 * * 1-5 checkmail.exe

&nbsp &nbsp Первая строка – комментарий, вторая – состоит из пяти полей, разделенных пробелами:

и имени запускаемой программы – checkmail.exe .

&nbsp &nbsp Символ * вместо значения определяет “все”. Т.е. * в поле означает, что задание должно выполняться все дни месяца. Может быть задано конкретное значение в виде десятичного числа или диапазона чисел. Так, в рассматриваемой строке в поле указано 8-16 – это означает, что задание будет выполняться с 8 часов до 16. Возможно задание значений, разделенных запятой – 8,9,10,11,12,13,14,15,16. В поле запись выглядит так – */15 . Это означает “шаг” – каждые 15 минут. Запись 1-5 в поле означает “с понедельника по пятницу”. В итоге строка будет означать “Выполнять задание checkmail.exe каждые 15 минут каждого часа каждого числа каждого месяца в рабочие дни недели.”

Облегченная версия nnCron под названием nnCron Lite , отличается от профессиональной тем, что в ней нет графического интерфейса пользователя, и планировщик может обрабатывать задачи только в классическом режиме. Сами задачи создаются с помощью ручного добавления записей в файл nncron.tab. &nbsp &nbsp Расширенный режим – основной и самый мощный синтаксический режим работы nnCron. В расширенном режиме у пользователя появляется возможность создавать именованные задачи (Tasks), каждая из которых запускается в указанное пользователем время и позволяет тонко настраивать и сами выполняемые действия и условия, при соблюдении которых они выполняются. Описание каждой задачи начинается с такой синтаксической конструкции:

Встретив эту последовательность в файле nncron.tab, планировщик переключается в расширенный режим обработки записи о задаче до обнаружения последовательности

означающей конец записи.

Встретив признак конца записи о задаче, планировщик переключается обратно в классический режим. Сделано это для того, чтобы записи в любом формате могли находиться где угодно в одном и том же файле nncron.tab (кронтабе).

&nbsp &nbsp Записи о заданиях в nncron.tab можно создавать как с использованием графической оболочки nnCron, так и редактированием его содержимого с помощью обычного текстового редактора.

Записи, имеющие классический формат, в списке задач, открываемом с помощью графического интерфейса, не отображаются. Они не являются именованными и создаются, изменяются и удаляются вручную, при редактировании файла nncron.tab

Для добавления задачи или напоминания в графической оболочке используется основное меню, открывающееся по щелчку правой кнопки мышки на иконке nnCron в области уведомлений рабочего стола (системном трее).

&nbsp &nbsp На первой вкладке (“Время” ) необходимо задать имя задачи, время старта или событие, по которому произойдет запуск, и учетную запись, с правами которой задача будет выполнена. Если пользователь не указан, то задача будет выполняться с правами системной локальной учетной записи (System Local Account). Необходимо учитывать, что некоторые запускаемые приложения могут быть успешно выполнены только под конкретной учетной записью и требуют загрузки профиля пользователя (приложения MS Office, например).

На вкладке “Действие” нужно определить, что именно должна выполнить создаваемая задача. Выбранный вариант действий вызовет отображение дополнительных опций, указание которых необходимо для успешного выполнения задания.

Вкладка “Дополнительно” вызовет отображение созданной задачи в том виде, в каком она будет записана в файл nncron.tab. Например:

AsLoggedUser – как пользователь, выполнивший вход в систему Time: 30 9 * * 1-5 * – время в крон-формате Action: – выбранное действие и его дополнительные опции (ниже) StartIn: “C:\SCRIPTS\TEST” – рабочий каталог ShowNormal NormalPriority – приоритет, с которым будет выполняться задача START-APP: C:\SCRIPTS\TEST\test1.bat – в качестве действия будет использован запуск командного файла test1.bat

Как устанавливать задачи для Cron

Наиболее простым и распространенным методом работы с Cron является панель администрирования хостинга. Однако, у различных панелей конфигурация Cron происходит по-разному.

Иногда случается, что хостинг не предоставляет возможности работы с Cron через панель администрирования. В такой ситуации используют SSH-протокол. С помощью него подключаются серверу, используя программу PuTTY, и вводят задачи в командной строке.

Для начала работы следует ввести команду:

crontab –e

Далее вы попадете в vi – текстовый редактор, однако, эти редакторы могут быть разными у разных хостингов. Если вы не знакомы с работой в vi, то вы можете ввести команду: EDITOR=ee crontab –e, которая перенаправит вас в более простой и понятный редактор.

В случае, когда хостинг не осуществляет поддержку открывшегося редактора, придется разобраться с работой vi:

  • для ввода текста необходимо перейти в одноименный режим, нажав кнопку «i»;
  • для выхода из режима воспользуйтесь кнопкой «Esc»;
  • для удаления символа в режиме ввода текста воспользуйтесь клавишами «Esc», а затем «x»;
  • сохранения и выхода из файла нажмите «:wq»;
  • в обязательном порядке нажимайте клавишу «Enter» в конце каждой строчки, это необходимо для работы Cron;
  • для просмотра уже имеющихся задач в Cron введите команду crontrab-l.

Примеры Crontab: планирование команд и скриптов

Мы показали вам пару примеров, как выводится информация. Это имело для вас смысл?

Позвольте пройти первый пример.

Minute | Hour | Day-Date | Month | Day Name | Command
|—–|——|—–|—–|—–|—–|—–|
| 0 | * | * | * | * | echo “Linux is Cool!” >> ~/crontab_log.txt |

Установка минутного значения в «0» означает, что команда будет выполняться каждый час в час.

Расширенные графики работы

Вы можете редактировать несколько значений одновременно. Если вы хотите, вы можете заменить все 5 звездочек со спецификациями.

Minute | Hour | Day-Date | Month | Day Name | Command
|—–|——|—–|—–|—–|—–|—–|
|*/5 | 3-6 | */5 | */2 |0,6| echo “Linux is Cool!” >> ~/crontab_log.txt |

Есть идеи, что говорит этот? Ради этого урока мы сделал эту работу особенно запутанной. Было бы необычно иметь что-то с таким большим количеством параметров «в дикой природе», но давайте посмотрим, сможете ли вы расшифровать это.

Давайте попробуем это вместе:

поле Ценность Смысл
Day Name 0,6 Суббота и воскресенье
Month * / 2 Каждый месяц, который делится на 2, месяц.
Day Date * Каждый день
Hour 3-6 С 3 до 6 утра
Minutes * / 5 Каждые 5 минут

На простом языке:

Таким образом, каждый второй месяц, по выходным, независимо от даты, эта команда будет выполняться каждые 5 минут между 3 утра и 6 утра.

Вау, это было запутанно. Если вы смогли следовать этому, вы готовы справиться с лучшими из них.

Напишите простой скрипт автоматизации cron для резервного копирования файлов.

До этого момента написанные вами задания cron делали только одно. Это может быть полезно, но, возможно, вы хотите сделать несколько задач.

К счастью, это не только возможно, но и очень просто. Если вы помните из исходного примера синтаксиса, вы также можете использовать путь к сценарию.

Это не ограничивается только bash, вы также можете реализовать скрипт, который использует Python или Perl, если хотите.

Каковы наши цели?

  • Работа будет обрабатываться в 3 часа ночи каждую ночь
  • Резервное копирование папку /Documents в zip-файл
  • Создайте текстовый файл со списком всего в каталоге
  • Создайте архивную папку, которая клонирует нашу резервную копию и текстовый файл в подпапку с текущей датой

our_backup_script.sh

#! /bin/bash

DATE=$(date +%d-%m-%Y)
# Date in format DAY##-MONTH##-YEAR####

mkdir -p ~/archive/$DATE
# создайте папку для сегодняшней даты в архиве, если архив не существует, сделайте архив 
ls -al ~/Documents > ~/archive/$DATE/contents.txt
# создайте текстовый файл со списком содержимого папки документы
cd ~/  && tar -cpzf $DATE.docs.backup.gz Documents/*
# перейдите в родительский каталог в папку tar / Documents
cp ~/$DATE.docs.backup.gz ~/archive/$DATE/documents_archive.gz
# один файл .gz остается в домашнем каталоге, дубликат отправляется в наш архив под его датой
andreyex@destroyer:~$ ls
 Desktop     Downloads   Music                  Pictures   Public      Videos
 Documents   ENV         our_backup_script.sh   projects   Templates  'VirtualBox VMs'
andreyex@destroyer:~$ bash our_backup_script.sh 
andreyex@destroyer:~$ ls
 25-11-2019.docs.backup.gz   Documents   Music                  projects    Videos
 archive                     Downloads   our_backup_script.sh   Public     'VirtualBox VMs'
 Desktop                     ENV         Pictures               Templates
andreyex@destroyer:~$ ls archive/25-11-2019/
contents.all_files.txt  documents_archive.gz

Все, что осталось сделать, сделать этот скрипт работой cron.

crontab -e

И добавьте туда следующее:

0 3 * * * bash ~/our_backup_script.sh

На самом деле, идея очень понравилась, мы могли бы просто сохранить это как ежедневную резервную копию. Одна из модификаций, которую мы сделали, – это переместить архив в папку на нашу машине, которая синхронизируется с облачным хранилищем.

Cron для Windows — автообновление страницы в Firefox

Вообще для Firefox давным-давно существовал плагин cronzilla, которому нужно было указать адрес скрипта и периодичность его выполнения, но в Firefox 4 он все еще не работает. Поэтому я попробовал найти аналоги опции в Opera, и наткнулся на замечательный плагин Reload Every, который полностью повторяет опцию reload every в контекстном меню в Opera с одним отличием — при перезапуске Firefox reload every надо запускать заново (в Opere это не требуется).

Этот вариант, учитывая то, что браузер — первая программа, которая запускается на компьютере, меня устроил. Чтобы не мешали постоянно запущенные под cron вкладки, можно открывать их в новом окне.

Как проверить, работает ли крон на сайте?

Быстрый способ убедиться что крон исправно работает — это опубликовать запись с датой позже текущей (она будет поставлена в очередь на публикацию) и посмотреть опубликуется она или нет.

Если крон работает, то запись просто опубликуется в заданное время. А если крон не работает, то мы увидим такую картину:

Крон может не работать по двум причинам:

  • Он отключен. Как отключать смотрите ниже.
  • Ваш сервер не умеет отправлять HTTP запросы. Крон активируется через неблокирующий HTTP запрос WP к самому себе.

По умолчанию крон запускается POST запросом, с помощью wp_remote_post() с любой посещенной страницы сайта, если время подошло. Но если у вас на сервере такой вариант не работает, то можно включить альтернативный вариант запуска крона. Для этого добавьте такую константу в файл wp-config.php:

define( 'ALTERNATE_WP_CRON', true );

Такой альтернативный запуск крона создаст запрос через wp_redirect(), т.е. запрос будет отправлен не из PHP, а клиентом (браузером). Подробнее см. spawn_cron().

«Сделал работу и ухожу»

Как уже было отмечено, если некоторое задание не было выполнено демоном
crond в указанное время
(например, компьютер был выключен), то процесс crond не выполняет такую команду позже, поскольку
информация о невыполнении задания ему не поступает. А для некоторых системных заданий такое
явление недопустимо.

Эту проблему позволяет решить другой системный демон, имя которого anacron.
В отличие от cron, он работает по следующему принципу. При запуске
(а запускается он во время старта системы из инициализационных скриптов)
он просматривает свой
конфигурационный файл (обычно /etc/anacrontab), в котором для каждого задания указывается
периодичность (в сутках), с которой должно повторяться выполнение этого задания. Далее
anacron проверяет, выполнялось ли данное задание в течение последних n дней. Если нет,
anacron запускает на выполнение команду, указанную в строке задания. При этом выполнение
команды может осуществляться с некоторой задержкой, величина которой (в минутах) должна быть
указана в строке задания. После выполнения задания anacron записывает дату
выполнения в
специальный файл, содержащий записи о времени последнего выполнения данного задания, чтобы знать, когда надо
выполнять это задание снова. Эти файлы сохраняются в каталоге /var/spool/anacron. В файл
записывается только дата, часы и минуты не запоминаются.

После выполнения каждого задания anacron посылает сообщение о его выполнении системному демону
протоколирования syslogd, а после выполнения всех заданий из конфигурационного файла заканчивает работу.

Конфигурационный файл /etc/anacrontab может содержать строки трех типов: строки описания
заданий, строки задания переменных окружения и строки комментариев. Строка описания заданий имеет
следующий формат:

          период  задержка  идентификатор_задания  команда

Как уже говорилось, период задается в днях, а задержка — в минутах. Идентификатор задания
может содержать любые символы, кроме пробелов и слэшей. Он используется для идентификации задания
при формировании сообщений демону протоколирования и при запоминании времени выполнения задания.
В качестве команды может использоваться любая команда оболочки.

Строки задания переменных имеют стандартный формат:

          ИМЯ_ПЕРЕМЕННОЙ = ЗНАЧЕНИЕ

В качестве строк комментария может выступать пустая строка, строка состоящая только из
пробелов или строка, содержащая произвольную последовательность символов, начинающуюся символом
‘#’ (перед которым может стоять любое количество пробелов).

Приведу в качестве примера файл /etc/anacrontab из стандартной установки дистрибутива Red Hat
Linux:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system.
1	5	cron.daily		run-parts /etc/cron.daily
7	10	cron.weekly		run-parts /etc/cron.weekly
30	15	cron.monthly		run-parts /etc/cron.monthly

Как видите, в Red Hat утилита anacron «подстраховывает» демон cron, запуская периодические
задания cron-а, если последний почему-либо их не запускал. Благодаря этому, в частности, скрипт
logrotate регулярно (точнее, при каждом запуске компьютера) выполняется,
несмотря на то, что демоном crond он не
запускается из-за выключения компьютера на ночь.
Среди регулярно запускаемых cron-ом скриптов (в каталогах
/etc/cron.daily, /etc/cron.weekly и /etc/cron.monthly) вы найдете скрипт
0anacron, который заботится о том, чтобы обновить записи о времени последнего
выполнения тех заданий, которые поручены обеим демонам (чтобы
исключить их повторное выполнение anacron-ом).

При желании можно, очевидно, сделать так, чтобы cron, в свою очередь,
«подстраховывал» anacron, периодически запуская его (хотя проще просто поручить
периодические задания cron-у).

Демон anacron запускается при старте системы и, выполнив предписанные
ему задания, завершает работу. Наверное поэтому нет никаких утилит, специально предназначенных
для ввода новых заданий демону anacron. Такие задания может давать только суперпользователь
путем прямого редактирования файла /etc/anacrontab. По-видимому, основное назначение
этого демона — выполнять какие-то работы по обслуживанию системы после периодов долгого простоя.

Создание крон задач

Для создания новых крон задач используется одна из функций: wp_schedule_event() или wp_schedule_single_event().

Вызывать функции создания крон задач нужно только один раз! Обычно это делается при активации плагина, а при деактивации эти крон задачи нужно удалять. Или можно сначала проверить нет ли уже указанной крон задачи, если нет, то добавить.

При вызове функции регистрации задачи она записывается в опцию сайта и работает уже от туда автономно.

Если задача есть в кроне, но она не срабатывает, значит во время крон запроса не подключается хук. Например, если выставлять задачу wp_schedule_single_event() через AJAX запрос и там же регистрировать хук этой задачи, то задача будет зарегистрирована в кроне, но функция в нужный момент выполняться не будет, потому что хук на который повешена функция срабатывает при AJAX запросе, а должен срабатывать при крон запросе! Поэтому сам хук нужно вешать в functions.php или в плагин или как-то еще, но не во время обработки аякс запроса.

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

Суть этого в том, чтобы не допустить планирования двух одинаковых событий в течение десяти минут друг от друга, но не препятствовать планированию одинаковых событий с разницей во времени больше десяти минут друг от друга.

События считаются одинаковыми, если совпадают: название хука и передаваемые параметры.

Запланируем ежечасное действие для плагина. Для этого вызовем wp_schedule_event() при активации плагина (если делать не при активации, то мы получим множество запланированных событий!).

register_activation_hook(__FILE__, 'my_activation');
function my_activation() {
	// удалим на всякий случай все такие же задачи cron, чтобы добавить новые с "чистого листа"
	// это может понадобиться, если до этого подключалась такая же задача неправильно (без проверки что она уже есть)
	wp_clear_scheduled_hook( 'my_hourly_event' );

	// Проверим нет ли уже задачи с таким же хуком
	// этот пункт не нужен, потому что мы выше удалил все задачи.
	// if( ! wp_next_scheduled( 'my_hourly_event' ) ) 

	// добавим новую cron задачу
	wp_schedule_event( time(), 'hourly', 'my_hourly_event');
}

add_action( 'my_hourly_event', 'do_this_hourly' );
function do_this_hourly() {
	// делаем что-либо каждый час
}

// При деактивации плагина, обязательно нужно удалить задачу:
register_deactivation_hook( __FILE__, 'my_deactivation' );
function my_deactivation(){
	wp_clear_scheduled_hook( 'my_hourly_event' );
}

Этот пример не полагается на активацию плагина (через директорию плагинов), вместо этого он добавляет событие, если его не существует.

// добавляет новую крон задачу
add_action( 'admin_head', 'my_activation' );
function my_activation() {
	if( ! wp_next_scheduled( 'my_hourly_event' ) ) {
		wp_schedule_event( time(), 'hourly', 'my_hourly_event');
	}
}

// добавляем функцию к указанному хуку
add_action( 'my_hourly_event', 'do_this_hourly' );
function do_this_hourly(){
	// делаем что-либо каждый час
}

Минус этого кода в том, что проверка происходит всегда при всех запросах, а добавляется задача всего один раз. Однако PHP затраты тут мизерные, сравнимые с обычным получением опции get_option(), поэтому на это можно закрыть глаза в угоду удобству.

Смотрите в описании функции wp_schedule_event().

// добавляет новую одноразовую крон задачу
add_action( 'admin_head', 'my_activation' );
function my_activation() {
	if( ! wp_next_scheduled( 'my_new_event' ) ) {
		wp_schedule_single_event( time() + 3600, 'my_new_event' );
		// time() + 3600 = 1 час с текущего момента.
	}
}

add_action( 'my_new_event','do_this_in_an_hour' );
function do_this_in_an_hour(){
	// делаем что-нибудь
}

Смотрите в описании функции wp_schedule_single_event().

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.

Синтаксис crontab

Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:

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

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:

Далее, усложним, будем запускать каждый час, в нулевую минуту:

Еще дальше:

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

Если идти так дальше, то можно запускать в первый день каждого месяца:

Можно в любой день, например, 15 числа:

В первый день недели первого месяца года, 0 часов 0 минут:

Или в нулевой день недели каждого месяца:

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:

Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:

Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:

Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:

  • @reboot — при загрузке, только один раз;
  • @yearly, @annually — раз год;
  • @monthly — раз в месяц;
  • @weekly — раз в неделю;
  • @daily, @midnight — каждый день;
  •  @hourly — каждый час.

Например, вот так просто будет выглядеть команда запуска скрипта раз в час:

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

#!/bin/bash

……

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

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

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

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

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

Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.

Историческая справка

Утилита была разработана ещё в начале 70-х годов прошлого столетия, когда Кен Томпсон и Деннис Ритчи создали ОС UNIX. Они работали над проектом по созданию многозадачной и многопользовательской системы Multics, в котором принимали участие компании AT&T и Bell Labs. В то время подобная система была настолько высокотехнологичным и прорывным продуктом, что позже Bell Labs отказалась от активного участия в проекте из-за крайне низкой востребованности подобного рода систем для широкого потребления.
Однако, используя наработки из проекта Multics, Томпсон и Ритчи на этой основе и на волне энтузиазма создали ОС UNIX. Такая мощная и прорывная платформа для полноценного раскрытия своего функционала нуждалась в обеспечении её функционалом в виде специализированного ПО и утилит, одной из которых и по сей день является cron. Разработчиком утилиты является Кен Томпсон.

Установка и регистрация планировщика nnCron.

&nbsp &nbsp nnCron – компактный (размером менее 1Мб) и мощный планировщик заданий для Windows, распространяющийся бесплатно для частного некоммерческого использования. По сравнению с большинством планировщиков, и в том числе встроенным в Windows MSTask.exe, nnCron позволяет не только запускать задачи в заданное время , но и реагировать на определенные события, такие, как модификация файла, создание, изменение или деактивация окна, запуск или завершение процесса, установление или разрыв Интернет-соединения, и т.п. &nbsp &nbsp Основные возможности nnCron: — может быть запущен в качестве службы (сервиса) или как обычное приложение — понимает cron-формат (Unix) и управляется с помощью текстовых файлов cron.tab, формат которых совместим с форматом кронтаб-файлов Unix-систем — умеет отслеживать и перезапускать просроченные задачи — умеет задавать и использовать переменные окружения (environment variables) — умеет запускать процессы от имени текущего авторизованного пользователя (WinNT/2000/XP) — позволяет запускать плагины (скрипты произвольной сложности), написанные на языке программирования Форт — гибко настраивается под конкретные нужды пользователя — не требователен к ресурсам компьютера.

&nbsp &nbsp Установка nnCron выполняется обычным способом. После завершения инсталляции и запуска службы nnCron, в системном трее появится иконка планировщика. Щелчок правой кнопки мышки на иконке позволяет получить доступ к основному меню программы.

Чтобы выполнить регистрацию nnCron, откройте домашний каталог программы (обычно- C:\Program Files\NNCRON\ ) и запустите tm.exe с параметром xReg. tm.exe xReg В появившемся окошке введите xUSSR регистрация в качестве имени, и текущий день недели на русском языке в качестве паpоля.

&nbsp &nbsp Основные настройки программы хранятся в файле nncron.ini домашнего каталога программы. Для изменения настроек удобно пользоваться основным меню, вызываемым правой кнопкой мышки. Выбирается пункт “Settings” (“Параметры”)

Настройки программы интуитивно понятны и вполне достаточны для комфортной работы с планировщиком. При необходимости, можно изменить язык программы, выбрать формат и размещение файлов журналов, резервных копий кронтабов, справочной системы, режимов запуска задач, их приоритет, пункты меню и некоторые другие опции.

Кроме настроек, через главное меню программы можно вызвать справку, дополнительные инструменты, которые облегчают создание заданий, отредактировать или выполнить принудительно конкретную задачу, создать новую задачу или напоминание, посмотреть текущий файл журнала nncron.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий