Настройка простой задачи cron на Linux

Недавно мне пришлось настраивать запланированную задачу на сервере, и в первый раз это трудно, и даже страшновато. Поэтому я решила написать статью об этапах настройки Cron. Мы создадим простой PHP-скрипт для отправки электронной почты один раз в день.

Необходимый базовый уровень

  • Базовый опыт работы с командной строкой;
  • Навыки работы с SSH на сервере Linux.

Задачи

  • Научиться настраивать простую запланированную задачу (задание cron) в среде Linux-сервера;
  • Установить задачу cron для отправки электронной почты ежедневно в указанное время.

Отправка электронной почты с помощью PHP

Сначала нужно создать простой PHP-скрипт для тестирования Cron Linux настройки. Я собираюсь создать файл, который отправляет электронную почту:

<?php
$to = 'me@example.com';
$message = 'This is the message.';
$subject = 'Insert Subject Here';
$headers = 'From: noreply@example.com' . "\r\n" .
           'Reply-To: me@example.com';
@mail($to, $subject, $message, $headers); 
?>

Если вы не знакомы с PHP-функцией mail() ознакомьтесь с официальной документацией. Я устанавливаю переменные, задающие получателя, электронный адрес отправителя, тему, содержание письма и заголовки. Это не самый современный или безопасный способ отправки электронной почты. Но это работает, поэтому я собираюсь использовать его для тестирования. Сохраняем код в файле cron.php.

Путь к публичной папке будет зависеть от дистрибутива Linux, но я поместила файл cron.php в /var/www/html/crontest. Поэтому полный путь к моему скрипту будет следующим: /var/www/html/crontest/cron.php. Вы можете протестировать этот скрипт непосредственно в браузере. Если адрес вашего сайта example.com, скорее всего, адрес файла будет example.com/crontest/cron.php. Если вы запускаете файл и получаете электронное письмо, значит, скрипт работает.

Localhost не настроен для отправки PHP-почты, поэтому этот скрипт должен запускаться из среды Linux.

Основной синтаксис Cron

Есть полезный сайт под названием Crontab Generator, который может настроить Cron PHP, но сначала мы кратко рассмотрим основной синтаксис.

Пример работы Cron:

* * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1

Части команды cron

Команда cron состоит из четырех основных частей:

Время выполнения	Выполнение PHP	Путь к скрипту	Результат
* * * * *	/usr/bin/php	/var/www/html/crontest/cron.php	> /dev/null 2>&1

Время выполнения - устанавливает минуты, часы, дни, месяцы и день недели.

Выполнение - задача cron должна вызвать PHP, который находится в папке /usr / bin / php.

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

Результат (необязательно) - можно записать результат в файл или отбросить эту часть > /dev/null 2>&1.

В приведенном выше примере задача Cron Linux настроена на отправку электронной почты каждую минуту часа ежедневно. Звездочка - это подстановочный знак, обозначающий «все».

  • Минуты - установите минуты, от 0 до 59;
  • Часы - установите часы, от 0 до 24;
  • Дни - установите день, от 1 до 31;
  • Месяцы - установите месяц, от 1 до 12 (январь-декабрь);
  • Неделя - установите день недели, от 0 до 6 (воскресенье - суббота).

Вот несколько простых примеров:

Синтаксис	Пояснение
0 * * * *	запускается один раз в час (каждую нулевую минуту каждого часа).
0 0 * * *	запускается один раз в день (в полночь каждого дня в нулевую минуту).
0 0 1 * *	запускается один раз в месяц (в первый день каждого месяца в полночь в нулевую минуту).
0 0 1 1 *	запускается один раз в год (в первый день первого месяца в полночь в нулевую минуту).

Существуют и другие настройки, например, для нечетных / четных дней, каждые 5 минут и т. д. Также доступно множество ресурсов, на которых можно найти конкретные настройки.

Настройка задачи Cron

Если cron настроен под учетной записью root, тогда нужно запустить sudo перед запуском кода.

Команда cron называется crontab. Мы задаем для нашей задачи выполнение рассылки электронной почты один раз в день, так что полная команда будет такой:

0 0 * * * /usr/bin/php /var/www/html/crontest/cron.php >/dev/null 2>&1

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

crontab -l 
crontab: no crontab for user

Теперь мы отредактируем crontab:

crontab -e

На этот момент вы, скорее всего, будете работать в редакторе vi, если вы никогда не меняли редактор своего сервера по умолчанию. В первый раз при настройке Cron это может немного сбивать с толку.

Вот что нужно сделать:

  1. Нажмите esc;
  2. Нажмите i, чтобы начать редактирование файла;
  3. Вставьте команду cron в файл;
  4. Снова нажмите esc, чтобы выйти из режима редактирования;
  5. Введите :wq, чтобы сохранить изменения в файле (w - write) и выйти (q - quit).

Теперь crontab сохранен, и электронное письмо должно отправляться один раз в день в полночь. Вы можете установить * / 5 * * * * - каждые 5 минут, чтобы проверить его работу.

Также можно добавить в файл несколько задач cron. Для этого поместите каждую команду в отдельную строку.

Перевод статьи «Setting Up a Basic Cron Job in Linux» дружной командой проекта Сайтостроение от А до Я.

16 мая 2017 в 13:42
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок