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