Apache Linux (Apache HTTP Server 2.4)

Apache — после миграции не выполняется задание по расписанию

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

После миграции Apache успешно показывает сайт, но не происходят запланированные операции — рассылка, очистка базы, синхронизация. Сам Apache 2.4 не является планировщиком фоновых заданий: необходимо проверить cron, systemd-таймеры, очередь и путь исполняемой команды, а не менять директивы VirtualHost без оснований.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

После миграции Apache успешно показывает сайт, но не происходят запланированные операции — рассылка, очистка базы, синхронизация. Сам Apache 2.4 не является планировщиком фоновых заданий: необходимо проверить cron, systemd-таймеры, очередь и путь исполняемой команды, а не менять директивы VirtualHost без оснований.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Системная запись не переехалаФайлы сайта и база обычно не включают crontab.Новый сервер без записи cron/timerВосстановить точную задачу из старой конфигурации
В команде указан старый путь PHP или скриптаНа новом сервере другая структура каталогов/версий PHP.Журнал сообщает no such file или command not foundПроверить окружение пользователя задачи
Задача выполняется, но запись в базу не происходитУспешный запуск планировщика не равен успеху операции.Cron запускается, в приложении ошибка подключенияПроверить зависимости и журнал приложения

#Пошаговая диагностика и исправление

  1. Выясните, какая задача должна срабатыватьВ документации приложения или в резервной копии сервера найдите имя скрипта, частоту, пользователя и рабочий каталог. Уточните, нет ли встроенного планировщика (например, приложения через веб-запрос), который требует отдельной настройки. Без этого новую cron-строку не создавайте.
  1. Проверьте системный cron текущего пользователяПо SSH под тем же пользователем, что выполнял задачу, прочитайте crontab -l. Для другого пользователя потребуется разрешённая административная проверка. На Debian общесистемные задания могут храниться в /etc/crontab и /etc/cron.d; на RHEL используются аналогичные файлы.
    Linux · Терминал (Bash)Команда
    Только чтение. Отсутствие пользовательского crontab не исключает systemd timer или очередь.
    crontab -l; ls -l /etc/cron.d/
  1. Проверьте systemd timers и воркерыВ системе с systemd проверьте list-timers --all; нужный таймер может быть неактивным или указывать на отсутствующий сервис. Если речь о фоновой очереди, посмотрите отдельные приложения-воркеры, а не только Apache.
  2. SSH Linux с systemd
    Linux · Терминал (Bash)Команда
    SSH Linux с systemd. Состояние может требовать sudo для дополнительных подробностей.
    systemctl list-timers --all; systemctl list-units --type=service --state=failed
  1. Сверьте путь и интерпретаторУточните реальную версию PHP CLI, которая исполняет команду: она может отличаться от PHP, выбранного через Apache/FPM. Проверьте путь скрипта и его владельца. Используйте абсолютные пути, особенно если у cron ограничено окружение.
  2. Пример скрипта и пути; замените настоящим, не выполняйте его без предварительной оценки
    Linux · Терминал (Bash)Команда
    Пример скрипта и пути; замените настоящим, не выполняйте его без предварительной оценки.
    command -v php; php -v; ls -l /var/www/example.com/bin/task.php
  1. Посмотрите журнал запускаВ Debian cron часто пишет в syslog/journal; в RHEL служба может называться crond. Ищите событие на запланированное время и затем журнал программы. При миграции проверьте часовой пояс сервера и изменение путей к базе.
  2. Для RHEL замените cron на crond
    Linux · Терминал (Bash)Команда
    Для RHEL замените cron на crond. journalctl может требовать права на чтение журнала.
    journalctl -u cron --since "today" --no-pager
  1. Восстановите один проверенный запускСохраните исходное расписание, затем откройте crontab -e именно от назначенного пользователя либо восстановите unit/timer по его исходному описанию. Не запускайте массовую отправку и обработку заказов вручную без теста на ограниченной выборке. Если старый сервер действует, проверьте отсутствие двойного запуска.
  1. Сопоставьте выполнение с результатомДождитесь одного штатного выполнения, проверьте журнал и результат в приложении. HTTP-ответ Apache можно проверить отдельно, но он не подтверждает работу фонового скрипта.
  2. Клиентская консоль; только проверка HTTP
    Linux · Терминал (Bash)Команда
    Клиентская консоль; только проверка HTTP. Не интерпретируйте 200 как успешный cron.
    curl -I https://example.com/

#Как проверить результат

Задание выполняется ровно один раз в назначенный интервал, запускается правильной версией PHP/интерпретатора и оставляет ожидаемый результат без ошибок. Сайт через Apache продолжает открываться.

#Если проблема не устранена

Если событие cron есть, но результата нет, исследуйте права, тайм-зону, путь, файл конфигурации базы и сетевые API. Не изменяйте Apache и его порты для исправления задач планировщика.

Так эту ошибку тоже называют

Источники и обновления

Для этой статьи пока не указаны источники. Мы отмечаем такие материалы и дополняем их при проверке.

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.