Нещодавно мені довелося налаштовувати заплановану завдання на сервері, і в перший раз це важко, і навіть страшнувато. Тому я вирішила написати статтю про етапи налаштування Cron. Ми створимо простий PHP-скрипт для відправки електронної пошти один раз в день.

Необхідний базовий рівень

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

Завдання

  • Навчитися налаштовувати просту заплановану завдання (завдання cron) в середовищі Linux-сервера;
  • Встановити завдання cron для відправки електронної пошти щодня в зазначений час.

Відправлення електронної пошти за допомогою PHP

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

Якщо ви не знайомі з 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 це може трохи збивати з пантелику.

Ось що потрібно зробити:

  • Натисніть esc;
  • Натисніть i, щоб почати редагування файлу;
  • Вставити команду cron в файл;
  • Знову натисніть esc, щоб вийти з режиму редагування;
  • Введіть :wq, щоб зберегти зміни у файлі (w — write) і вийти (q — quit).
  • Тепер crontab збережений, і електронний лист повинен відправлятися один раз в день опівночі. Ви можете встановити * / 5 * * * * — кожні 5 хвилин, щоб перевірити його роботу.

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

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