Что такое cron. Cron — запуск программ пользователя в указанное время. Размышления о безопасности

17.11.2021

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

Как настраивать cron в Личном кабинете (для unix-тарифов)

Поскольку не все PHP-программы могут работать через CLI SAPI без предварительной модификации, можно запускать их через wget . Например:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Если в скрипте используются функции require , include , причём в них указаны относительные пути, то в начале выполняемого скрипта используйте вызов функции chdir() , которая задаст текущую рабочую директорию.

Как получать сообщения об ошибках от программ, запускаемых cron

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

MAILTO=адрес@домен.ru

Конечно, адрес@домен.ru нужно заменить на реально существующий адрес электронной почты куда надо будет доставлять уведомления. Если нужно получать сообщения об ошибках на несколько адресов, укажите все эти адреса через запятую.

Обратите внимание на то, что cron будет присылать по почте то, что выводят запускаемые скрипты. Например, если вы напишете скрипт, который будет печатать строчку «Hello, world» и поставите его на выполнение через cron, вы будете получать по почте письмо со строкой «Hello, world» каждый раз, когда cron будет запускать такой скрипт.

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

> /dev/null 2>&1

Полностью строка для cron будет выглядеть так:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Рекомендуем проверять корректность синтаксиса скриптов, которые вы устанавливаете на выполнение через cron. Скрипты могут содержать ошибку, могут неодинаково работать при запуске через веб-сервер и через cron, и так далее. Для того, чтобы убедиться, что скрипт будет правильно работать через cron, предварительно проверьте его такой командой в unix shell:

/usr/local/bin/php -l script.php

Если ошибок в скрипте нет, вы увидите сообщение «No syntax errors detected in script.php».

Ограничения

Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов, и так далее.

, | |

На сегодня Cron является одним из наиболее распространенных способов автоматизации запуска процессов в Linux. Cron – это демон, который работает в фоновом режиме и позволяет планировать и автоматизировать запуск различных (в том числе и связанных с поддержкой сервера) задач. Для этого используется конфигурационный файл кронтаб (crontab).

Установка Cron

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

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install cron

Cent OS/Red Hat Linux:

sudo yum update
sudo yum install vixie-cron crontabs

После завершения установки необходимо убедиться в том, что cron запущен в фоновом режиме:

sudo /sbin/chkconfig crond on
sudo /sbin/service crond start

Базовый синтаксис

Рассмотрим следующий пример задачи, запуск которой нужно спланировать:

5 * * * * curl http://www.google.com

Синтаксис планирования различных задач сначала может показаться запутанным. На самом деле он очень краток и прост, нужно просто разобраться, как его читать. Каждая строка делится на график и команду. В строку можно внести практически любую команду. График делится на 5 различных полей для планирования в следующем порядке:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

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

Данный раздел содержит примеры планирования наиболее общих задач.

Чтобы команда автоматически выполнялась каждую минуту:

Чтобы команда выполнялась каждую двенадцатую минуту часа (08.12, 09.12, и т.д.):

Чтобы команда запускалась каждые 15 минут:

0,15,30,45 * * * *

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

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

График можно делить. То есть, вместо 0,15,30,45 можно использовать:

Обратите внимание на диапазон 2-6. Данный синтаксис будет запускать указанную команду с 2.00 до 6.00 утра каждые 15 минут.

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

Настройка cron

Разработав график выполнения задач, необходимо поместить его в правильной точке системы, чтобы демон мог найти и прочесть его. В целом, таких точек в системе несколько, но, как правило, такой график помещают в crontab пользователя. Как уже говорилось, crontab – это конфигурационный файл демона cron, который содержит график запуска определенных команд и программ. Этот файл находится в /var/spool/cron/crontab, но его не принято редактировать напрямую. Для внесения в файл нужных программ используется одноименная команда – crontab. То есть, чтобы отредактировать файл crontab, можно просто ввести:

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

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

Очистить crontab можно с помощью следующей команды:

Пользователь с повышенными привилегиями может редактировать crontab других пользователей при помощи:

crontab -u <пользователь> -e

Вывод cron

После выполнения задачи cron отправляет выходные данные на электронный адрес пользователя (если только вывод не нужно направить в лог или /dev/null). Адрес электронной почты можно указать вручную, внеся параметр MAILTO в верхнюю часть crontab. Также можно указать оболочку, которую нужно запускать, путь к двоичному файлу cron и домашнему каталогу. Для этого:

сначала откройте crontab:

затем отредактируйте его следующим образом:

SHELL=/bin/bash
HOME=/
MAILTO=”example@some_user.com”
#This is a comment
* * * * * echo ‘Run this command every minute’

Данная строка вернет Run this command every minute. Демон cron будет отправлять такой вывод на почту example@some_user.com. Это, конечно, не очень удобно. Как уже говорилось ранее, данный вывод можно направлять в лог-файл, чтобы избежать подобных ситуаций.

Для этого нужно просто добавить:

* * * * * echo ‘Run this command every minute’ >> file.log

Примечание: символы >> направят вывод в лог. Кроме логов можно также использовать /dev/null при помощи следующего PHP-скрипта, работающего в фоновом режиме.

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

Ограничение доступа к cron

Чтобы ограничить доступ к демону cron, нужно использовать файлы /etc/cron.allow и /etc/cron.deny. чтобы открыть (allow) или закрыть (deny) доступ определенному пользователю, нужно просто внести имя пользователя в соответствующий файл. По умолчанию демон cron доступен всем пользователям. Чтобы запретить доступ всем пользователям и предоставить доступ только пользователю example, нужно использовать следующую последовательность команд.

Я многое слышал о том, что в linux есть удобный планировщик задач cron. Однако, у меня не было необходимости им пользоваться, и разбираться в его настройки не хотелось… консоль, много английских букавок… было страшно. Но, благо, мои опасения были напрасны — всё до элементарного просто. В статье будет рассмотрено, как настроить выполнение своих скриптов по расписанию, и в качестве примера установим «кукушку».

Для начало немного о том, как это вообще работает.

При запуски системы стартует демон cron. Им можно управлять (останавливать/запускать/узнавать статус) командой: sudo service cron (stop/start/status). Но это редко, когда бывает нужно.

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

Задания находятся в файлах имена которые равны именам пользователя, а сами файлы лежат в папке /var/spool/cron/crontabs. Папка защищена от постороннего вмешательства и доступна только суперпользователю. Но, каждый пользователь может настроить расписание для своих задач, не зная пароля от рута (суперпользователя).

Что бы настроить cron для обычного пользователя достаточно набрать:

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

sudo crontab -u user -e

Заместо юзера пишем нужного пользователя, например root.
При первом запуске будет вопрос о редакторе… мне нравится nano. Он простой и запускается без графического интерфейса.


Синтаксис для задач очень прост. Рассмотрим пример со скриншота по запуску кукушки:

0 */1 * * * /home/zegi/bin/kuku

Всего в задаче 2 основных поля: 0 */1 * * * — обозначает время, когда будет срабатывать команда. А /home/zegi/bin/kuku — путь к скрипту в котором описана команда(ы).

С адресом к скрипту не должно быть проблем (zegi — это имя пользователя… не забудьте поставить своё). Но нужно пояснить, как задать крону время для выполнения скрипта.

Всего у нас 5 ячеек для ввода, которые разделяются пробелом.
1 — минуты (числа от 0 до 59)
2 — часы (от 0 до 23)
3 — день месяца (от 1 до 31)
4 — месяц в году (от 1 до 12… например февраль это 2)
5 — день в недели (от 1 до 7. Используется западная неделя, когда началом является воскресенье. т.е. ВС-1, ПН-2, ВТ-3, СР-4, ЧТ-5, ПТ-6, СБ-7).

Каждая ячейка обязательна должна быть заполнена. Если нужно, что бы команда выполнялась каждый месяц, то ставим * в 4-ом поле. Тоже самое относится и к остальным полям.

Вернёмся к примеру с кукушкой, когда скрипт срабатывает каждый час. Что бы задать периодичность используется / . Например если нужно, что бы задача выполнялась каждых 5 минут, по понедельникам то ставим:

Если нужно, что бы задача выполнялась каждый час, то придётся устанавливать и определённую минуту. Если оставить звёздочку(* */1 * * *), то крон будет выполнять каждую минуту — ибо условия соблюдены: он проверил все 5 ячеек и их значение соотвтествует текущему времени (минуты — всё равно. Часы — каждый час, а не только определённые).
Перед слешем всегда должна идти звёздочка. Например, назначить выполнение каждую минуту, начиная с 30-ой, вписав 30/1 — не получится.

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

* 12,18 * * 2,3,4,5,6

По окончанию редактирования задач, не забудьте сохранить изменения (Ctrl+O > энтер), а затем можно выйти (Ctrl+x).

Cron должен оповестить, что появилась новая задача и он готов её выполнять, написав: «crontab: installing new crontab».

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

И в конце сам скрипт кукушки , который кукукает каждый час:

#!/bin/bash
h=`date +%l`
while [ $h -gt 0 ]
do
play ~/kukushka.wav
h=$[$h-1]
done

Скачать звук с кукушкой можно командой:

wget http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav

Play входит в пакет sox. В ubuntu его можно установить командой.

Cron (крон), Crontab (кронтаб), Планировщик Задач - эти названия все, кто связан с «сайтостроением» слышали неоднократно. Так что же такое Cron? Как с ним работать? Зачем нужен Cron и как его правильно настроить? Все эти вопросы мы сегодня и разберем.

Первое что хочу сразу отметить: Cron , Crontab , Планировщик Задач - это всё одно и тоже, не смущайтесь от разнообразия названий.

В практике любого web-мастера, неизменно возникнет необходимость в запуске каких-либо задач по расписанию. Т.е. Вы просто прописываете нужную Вам команду, на выполнение какой-то задачи в заданное время, и всё. Дальше все происходит без Вашего участия – автоматически, и что самое приятное в нужное Вам время.

Например, Вам нужно периодически отсылать уведомления партнерам по электронной почте. Или Вы хотите установить автоматические поздравления или напоминания. Или у Вас есть каталог сайтов и Вы хотите чтобы с заданной периодичностью скрипт каталога проверял обратные ссылки и т.д. Все эти задачи можно запросто автоматизировать, поручив это Cron или, как ещё говорят – Планировщику Задач . А бывают скрипты в которых для нормальной работы Крон просто необходим.

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

Итак, давайте рассмотрим все практические действия по настойке Cron на примере русcифицированной cPane l (панели управления сайтом) Хостинговой компании Гудзон . Почему именно Гудзон ? Всё просто – здесь живет мой сайт и мне очень нравится этот Хостинг: полный пакет всех самых возможных услуг за очень умеренную цену.

Хотя настройка Планировщика Задач происходит примерно везде одинаково.

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

Находим в этом разделе Планировщик задач и кликаем по нему. Иногда это меню называется Панель Cron . Вот как характеризуется Cron :

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

На выбор предоставляется два варианта управления Кроном:

Стандартный и Продвинутый (в стиле Unix) , рассмотрим каждый из них.

Первый вариант. Кликаем по кнопке Стандартный , открывается окно установки задач:

Как видите здесь все очень просто. Нужно просто установить время выполнения команды, указав для этого в соотвествующих полях, когда будет запускаться команда, во сколько: Минут , Час , День , Месяц , День недели . И конечно же прописать саму команду на запуск в поле: Команда для запуска .

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

Давайте разберемся, что мы здесь написали. А написали мы следующее задание: запускать команду на исполнение:
/usr/bin/php /home/freeman/domains/public_html/cron/new_day.php
каждые 30 минут, каждые 6 часов, каждый день января месяца, если он попадает на понедельник.

После установки задания нажимаем кнопку Add New Cron Job .

Не понятно что написали? :) Давайте расмотрим второй вариант, а затем поясню подробнее. Возвращаемся на преведущую страницу.

Второй вариант. Кликаем по кнопке Продвинутый (в стиле Unix) , открывается окно установки задач:

Этот вариант установки задания Крону, мне нравится больше. И хоть он и называется Продвинутый , на мой взгляд проще и удобнее.

Здесь так же как и в первом случае, нужно указать когда будет запускаться команда, так же указываем: Минут ы, Час ы, День , Месяц , День недели и само задание на исполнение в поле Команда . После этого нажимаем кнопку Добавить Cronjob . Задание задано. Страница обновляется:

И Вы можете добавить новое задание, повторив всю процедуру заново. Удалить задание можно нажав на крестик напротив задания справа.

Есть еще один не обязательный параметр, но я рекомендую его прописывать: это адрес электроной почты . На этот адрес будет приходить отчет об исполнении команды. Поле необязательное, но лучше адрес ввести, что бы быть в курсе дела, если что-то пойдёт не так Крон сообщит Вам об этом в письме, а если письмо пришло пустое значит всё ОК!

Что мы написали здесь? Запускать команду в 11 минут, каждого 2-го часа, каждый день, каждый месяц, 1-й, 3-й, 5-й, 7-й дни недели.

В поле выбора: Минут указываете минуту (или минуты) в которую будет запускаться задание, в поле Час указываете час (либо часы) в который(е) будет выполняться задание, а так же день(и), и месяц(ы), в каждом поле можно указать как конкретное время так и интервал.

Например, можно указать не просто 11 минут, а 11-15 (интервал), это значит, что задание будет запускаться каждые 11, 12, 13, 14, 15 минут. Или указать кокретные минуты, например: 11, 14, 18 - это значит что задание будет запускаться на 11, 14, и 18 минутах. Еще можно использовать знак * (звездочка) - обозначает каждый . Если поставить * (звездочку) в поле Минуты, то соотвественно задание будет запускаться каждую минуту, т.е. 60 раз в час.

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

Запись */2 обозначает: каждые 2 часа . Все эти вариаты записей применимы ко всем полям (Минут ы, Час ы, День , Месяц , День недели ) при указании задания Крону. Сами понимаете вариантов может быть миллионы, Запускай задание на выполнение, хоть каждую минуту круглый год. Конечно такая необходимость практически никогда не возникает, но теоретически такая возможность есть.

И еще имейте виду некоторые Хостинги наклыдывают ограничения, на запуск Крона, например не чаще 3 - 10 раз в час. Почему? Создается довольно ощутимая нагрузка на сервер. За нарушение Ваш аккаунт могут заблокировать.

Теперь давайте разберемся как заполняется поле Команда для запуска (в первом варианте) или Команда (во втором варианте).

Задание задаётся следующим образом.

Первым делом вы указываете путь к PHP на Вашем сервере, у меня на сервере путь такой /usr/bin/php у вас может быть другим, уточните у админов вашего сервера, после пути к PHP ставите пробел и пишите полный внутренний путь к файлу который должен запускать Cron . Допустим мне необходимо чтобы Крон запускал файл mail.php , зная внутренний путь к файлу я пишу следующее:

public_html/cron/mail.php

т.е. в корневой папке public_html , есть папка cron в которой лежит файл mail.php а полностью команда на запуск файла mail.php будет вылядеть так:

/usr/bin/php /public_html/cron/mail.php

На разных хостингах, путь до PHP может отличаться, и записываться по разному, корневая папка расположения сайта тоже не всегда бывает public_html , поэтому если нет конкретного примера записи задания Крону, то лучше об этом спросить у администратора, описав что Вы хотите получить в итоге. Хорошая

Оригинал: Using cron scheduler on Linux systems
Автор: Rares Aioanei
Дата публикации: 29 сентября 2011 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2011 г.

1. Введение

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

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

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

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

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

$ ps faux | grep cron

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

Root 1424 0.0 0.0 22000 884 ? Ss 13:56 0:00 /usr/sbin/cron

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

3.1. Crontab

3.1.1. Пример

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

#!/bin/sh xterm -e "dialog --msgbox "Testing cron..." 234 234" # This is a very simple example, treat it as it is

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

$ chmod +x crontest.sh

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

E ставится для редактирования, -r - для удаления. Будьте очень осторожны! Многие системные администраторы по неосторожности вводили -r вместо -e, тем более что эти клавиши расположены рядом, и удаляли все записи из crontab. В любом случае, скорее всего вы увидите полностью закоментированный файл (в crontab для обозначения комментариев используется #), в котором приведены примеры и описаны назначения полей записей. Да, запись состоит из полей, последнее из которых задает исполняемую команду, а остальные - временные характеристики. Итак, наша запись в crontab для скрипта, запускаемого каждые пять минут, выглядит следующим образом:

$ */5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

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

3.1.2. Поля crontab

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

5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

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

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

3.2.1. Скрипты cron

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

30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh

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

30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh

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

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

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

$ ls /etc | grep cron

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

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

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

* * * * * /usr/local/bin/check-disk-space.sh

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

По дням:

30 02 10 01,06,12 * /home/$user/bin/checkdrive.sh

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

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

00,30 * * * * /home/$user/backupdata.sh

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

* * * * 6,7 /usr/bin/weekend

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

20 11,16 * * * /usr/sbin/command

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

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

01 * 2 05 * /sbin/system_command

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

*/10 * * * 1-5 /usr/local/bin/check-disk-space.sh

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

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

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

0 0 1 1 * /usr/local/bin/check-disk-space.sh

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

0 0,12 1 */6 * /usr/local/bin/check-disk-space.sh

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

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

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

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

20 0-23/2 * * * /usr/local/bin/check-disk-space.sh

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

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

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

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

Похожие статьи