Делаем «жизнь» в Linux проще или автоматизация запуска процессов с помощью cron. Настройки Cron: особенности, пошаговая инструкция и отзывы

Я многое слышал о том, что в 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 , поэтому если нет конкретного примера записи задания Крону, то лучше об этом спросить у администратора, описав что Вы хотите получить в итоге. Хорошая

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

Как работает crond

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

Составление расписания заданий

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

Формат записей файла crontab

Часть time-date (время-дата) состоит из пяти числовых полей, разделенных пробелами и определяющих время запуска задания:

Для удобства заполнения указанных полей введены следующие правила:

  • Можно указывать значения в виде численных интервалов. К примеру, интервал 1-3 в поле часов означает 1.00, 2.00 и 3.00 пополуночи, 2-4 в поле дня недели - вторник, среду или четверг.
  • Интервалы можно задавать с шагом больше единицы. Например, чтобы указать каждый второй час, начиная с полуночи, следует установить интервал 0-23 с шагом 2 через косую черту: 0-23/2
  • Звездочка (*) указывает полный интервал значений поля - от минимального до максимального. Например, в поле дня месяца звездочка означает интервал 0-31, в поле дня недели - 0-7
  • День недели или месяц можно указать первыми тремя буквами его (английского) названия

Примеры времени-даты

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

0 1 * * * Запуск задания ежедневно в 1.00 пополуночи 30 14 * * 0 Запуск задания по воскресеньям в 2.30 пополудни 0 23-7/2,8 * * * Запуск задания каждые 2 часа с 23.00 до 7.00 и в 8.00 0 12 * 1 mоn Запуск задания в полдень каждого понедельника января каждого года 0 12 2 feb * Запуск задания в полдень второго февраля каждого года

Поле command

Поле command (команда) отделено от полей времени-даты одним или несколькими пробелами и простирается до конца строки. Команды обрабатываются оболочкой /bin/sh .

Например, следующая запись в файле crontab предусматривает ежедневный запуск программы /usr/sbin/backup в 1.00 пополуночи:

0 1 * * * /usr/sbin/backup

Некоторым командам (например, mail) требуется ввод информации с устройства стандартного ввода. Это указывается при помощи знака процента (%). Первый такой знак обозначает начало стандартного ввода, каждый последующий - смену строки.

Редактирование файла crontab

Файл crontab редактируется командой crontab -e . Возможны два подхода:

  • создание нового файла со всеми записями, которые должны входить в файл crontab , с последующей его записью на диск под этим именем по команде crontab ;
  • непосредственное редактирование файла по команде crontab -e .

Запись из файла

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

0 1 * * * /usr/sbin/backup

Созданному файлу следует присвоить подходящее имя, например сron jobs . После того, как указанный файл создан, его содержимое необходимо записать в файл crontab командой:

~$ crontab cronjobs

Содержимое файла cronjobs полностью заменит содержимое файла crontab данного пользователя. Используя этот метод, любой пользователь может редактировать свой файл crontab . Суперпользователь обладает особым правом редактировать файлы crontab остальных пользователей. Редактирование чужого файла указывается флажком -u . Например, по команде:

~# crontab -u oleg cronjobs

файл cronjobs записывается как файл crontab пользователя oleg .

Непосредственное редактирование файла crontab

Команда crontab позволяет избежать многоступенчатой операции с созданием отдельного файла. Если ввести команду crontab с опцией -е, можно редактировать файл crontab непосредственно.

По умолчанию по команде crontab с опцией -е файл crontab загружается в редактор . Редактор Vi - мощный, хотя и сложный инструмент, популярный среди опытных пользователей Unix . Тот, кто предпочитает другой редактор, например Xedit , может установить соответствующее значение переменной среды EDITOR:

~$ export EDITOR=xedit

После этого ввод команды

приводит к открытию файла crontab в указанном редакторе.

Подобно тому, как обычный пользователь может редактировать собственный файл crontab , суперпользователь может редактировать файлы crontab остальных пользователей. Для этого используется команда:

~# crontab -u user-name -e

Просмотр файла crontab

Для просмотра содержимого файла crontab вводится команда:

Суперпользователь может просматривать файлы crontab остальных пользователей:

~# crontab -u username -l

Удаление файла crontab

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

Суперпользователь может удалять файлы crontab остальных пользователей.

Введение

Размещая сайт, мы желаем добиться бесперебойной работы без нашего участия.

Значит, требуется автоматизировать процессы, и тут на помощь приходит cron.

Cron - программа, демон для автоматического запуска программ и скриптов на сервере в необходимое время.

Crontab в панели управления Timeweb

Если ваш аккаунт оплачен, и вас не уличили в спам-рассылке, то раздел Crontab доступен и работоспособен:

Интерфейс Crontab в панели управления Timeweb дружелюбен и интуитивно понятен: даже начинающие пользователи, до этого не имевшие опыта работы с cron, легко разберутся в том, как создавать задачи. Создав задачу, вы сможете в автоматическом режиме делать бэкапы, рассылки, чистить кэш и выполнять другие типовые действия.

Crontab в панели управления Timeweb поможет любому пользователю автоматизировать свои задачи и достичь нужный ему результат.

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

В разделе Crontab создаются новые задачи. Для этого потребуется заполнить поля:

  • Название . Это имя нашей задачи.
  • Тип файла и путь до файла . В зависимости от того, на каком языке написан сценарий, выбираем тип файла и путь до него. Если в задаче запускается скрипт, требующий переменные веб-сервера, запуск напрямую через php-интерпретатор приводит к ошибкам. Поэтому в случае, когда Вы используете скрипт, работающий при запуске через адресную строку браузера, необходимо выбирать тип файла "HTTP-запрос" и указывать URL для запроса аналогично тому, как он указывается в адресной строке "ваш_сайт/путь/до/скрипта/script.php?параметр1=значение1&параметр2=значение2".

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

Нюансы

Небольшие нюансы, о которых стоит помнить при работе с cron.

1. Cron работает, если аккаунт оплачен и нет ограничений.

Проверить статус можно создав файл с расширением php (например twtest.php) с кодом:

И обратившись к файлу в браузере.

В браузере увидите информацию:

uid=12345(login) gid=600(customers) groups=600(customers) - говорит о том, что cron и почта доступны

uid=12345(login) gid=600(customers) groups=601(newcustomers),600(customers),660(spammers) - пишем в поддержку

2. Файл, который запускаете, должен иметь права на чтение и исполнение (r+x).

По умолчанию файлы на хостинге создаются с правами 600. Поменять права на нужные можно по ssh командой:

Chmod 744 twtest.php

или в Файловом менеджере, об этом у Timeweb есть инструкция:

3. Дабы не захламлять e-mail лишними письмами, настройте часто исполняемые скрипты на запись лога в файл , а не в консоль.

CRON по SSH

Настройка планировщика по ssh описана столько раз, что нового рассказать не получится.

Подключение по ssh подробно описано в справочном центре Timeweb:

После прочтения надо найти файл со скриптом, перемещаясь между директориями командой cd. Найдя файл введите pwd и скопируйте путь (пример "/home/c/cc123456/public_html/test/")

Если не знаете какие права у файла введите:

Chmod 744 имя_файла

При подключении по ssh редактировать задачи можно командой

Crontab -e

В первый раз сервер попросит выбрать редактор:

Select an editor. To change later, run "select-editor". 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :

Система указывает на простой редактор nano под цифрой 2. Если не рассчитали силы или случайно выбрали vi, не пугайтесь, нажмите Esc, затем введите двоеточие q и нажмите enter.

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

Select-editor

и выберете nano.

Задания пишутся по строкам. Пример:

1 2 3 4 5 /opt/php56/bin/php /home/с/сс123456/public_html/twtest.php

Значения первых пяти значений:

  • 1 минуты — число от 0 до 59
  • 2 часы — число от 0 до 23
  • 3 день месяца — число от 1 до 31
  • 4 номер месяца в году — число от 1 до 12
  • 5 день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Для каждого параметра возможно задать необходимое количество значений через запятую. Например, если в поле «часы» написать 8,23, то задание будет запущено в 8 часов утра и в 23 часа вечера. Можно задать интервал: 9-18 будет означать, что программа запустится каждый час в период с 9 до 18 часов включительно. Символ "*" означает «все возможные значения». Например, указание "*" в поле «часы» будет означать «запускать каждый час». Символ "/" служит для указания дополнительной периодичности задания. Например, "*/3" в поле «минуты» означает «каждые три минуты».

"/opt/php*/bin/php" где php*/ = php53/ php5.3/ php54/ php5.4/ php56/ php5.6/ php70/ php7.0/ php71/ php7.1/

Последняя запись указывает на путь до файла и название файла, который запускаем.

Нюансы

  1. При изменении в панели управления в разделе "Crontab" удалятся изменения записей сделанных по ssh!
  2. Если определены оба поля "день месяца" и "день недели" , то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца. Например, следующая команда будет выполняться в 9 часов 19 минут каждую среду и каждое 7 число месяца, даже если 7 число не совпадает со средой.

19 9 7 * 3 /opt/php56/bin/phpn /home/с/сс123456/public_html/twtest.php

Частные случаи

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

Для этого пишем в crontab:

* * * * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

для запуска файла каждые 30 секунд.

Иногда при использовании планировщика запуска программ cron неизвестно, сколько длится выполнение скрипта. Для избежания двойного запуска скрипта требуется проверка на завершение предыдущего запуска скрипта.

Логичным вариантом будет создание lock файла и при запуске скрипта проверять наличие файла. Но на хостинге Timeweb, как и на других хостингах, присутствует ограничение по процессору. Скрипт зависит от условий и времени выполнения, а значит, мы не можем предугадать время выполнения скрипта. Если скрипт выполнится с нарушением правил и ограничений ( ), то процесс завершится со стороны хостинга. Тогда lock файл не будет удален, а значит, и скрипт не будет запускаться по крону, пока файл не будет удалён.

Маэстро из отдела инженеров рассказал, как решить задачу.

Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:

#!/bin/bash command=$@ no_spaces=`echo $command | sed -e "s/\s/_/g" -e "s|/|_|g"` pidfile=/var/tmp/$no_spaces.pid lockfile=/var/tmp/$no_spaces.lock if [[ -e $pidfile ]] then pid=`cat $pidfile 2>/dev/null` ps h $pid >/dev/null 2>/dev/null if [[ $? -eq 0 ]] then exit 1 else rm $lockfile fi fi echo $$ > $pidfile /usr/bin/flock -w 0 $lockfile $command rm $pidfile

В панели управления в разделе crontab выбираем тип "Исполняемый бинарный файл".

В поле “Полный путь” пишем:

/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php

Где

  • /home/c/cc123456/tmp/twtest.sh - наш скрипт проверки
  • /opt/php56/bin/php - путь до нужного интерпретатора
  • /home/c/cc123456/tmp/twtest.php - путь до нашего скрипта

Указываем необходимое время запуска и придумываем название.

Заключение

Теперь вы знаете, как работать с cron и автоматически запускать задачи. Более подробную информацию о cron ищите в "man cron". Удачи!

В ОС 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. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов, и так далее.