#Симптом и границы применимости
Nginx может обслуживать веб-интерфейс приложения, но обычно не выполняет его фоновые задания. Если после восстановления из копии остановились отправка писем, обработка очереди или очистка данных, нужно проверить cron, systemd-таймеры, отдельные воркеры и само приложение.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Расписание отсутствует в резервной копииАрхив сайта и базы часто не содержит системные задания. | В crontab и timers нет ожидаемой задачи | Восстановить расписание из документированной конфигурации |
| Изменился путь или пользовательРабочие команды могли быть привязаны к старой файловой структуре. | В журнале job видно file not found либо permission denied | Сверить пути, окружение и права на каталог |
| Воркер очереди остановленВеб-запросы и очередь обычно выполняются разными процессами. | Задания накапливаются, systemctl показывает failed | Запустить правильный сервис после проверки команды |
#Пошаговая диагностика и исправление
- Уточните, кто запускал задачу раньшеВ панели приложения или документации зафиксируйте имя команды, пользователя и частоту запуска. Если это задача WordPress, 1C или иной платформы, её механизм может отличаться от системного cron. Не создавайте новую задачу по догадке: возможен двойной запуск.
- Проверьте системное расписание и таймерыВыполните просмотр задач текущего пользователя, затем отдельно пользователя приложения, если известен и разрешён доступ. Команда crontab -l не изменяет список. Для systemd обратите внимание на timers со статусом NEXT и LAST.Linux · Терминал (Bash)КомандаSSH Linux с systemd; crontab только текущего пользователя. sudo crontab -u ИМЯ -l — только для полномочного администратора.
crontab -l; systemctl list-timers --all
- Проверьте старые пути и файлы после восстановленияСравните исполняемый скрипт и путь к нему с резервной копией; используйте ls -l и команду чтения конфигурации, а не запуск задачи. Обратите внимание на ссылки на старую версию PHP, окружение и права пользователя. Не делайте chmod 777.
- Это пример расположения — замените на реальный путь; команды не запускают задачуLinux · Терминал (Bash)КомандаЭто пример расположения — замените на реальный путь; команды не запускают задачу.
ls -l /var/www/example.com/current/bin/job.php; command -v php
- Посмотрите журнал планировщика или воркераДля cron изучите syslog/journalctl по вашему дистрибутиву. Для systemd-сервиса смотрите его настоящее имя и журнал за момент запуска. Факт срабатывания планировщика не означает успешной работы бизнес-операции.Linux · Терминал (Bash)КомандаНа RHEL cron может называться crond; время указано относительно времени сервера.
journalctl -u cron --since "2 hours ago" --no-pager; systemctl list-units --type=service --state=failed
- Проверьте ручной тест без повторного списанияЕсли задача отправляет деньги, письма или массово меняет данные, сначала получите безопасный тестовый режим или копию базы. Если он предусмотрен приложением, запустите задачу от того же пользователя с тем же окружением; наличие --dry-run не предполагайте без документации.
- Восстановите один механизм запускаПосле резервной копии конфигурации восстановите найденную запись cron в crontab -e указанного пользователя либо systemd timer по документации сервиса. Проверьте, что на старом сервере или в панели нет второго экземпляра, и проверьте корректность абсолютных путей.
- Отдельно проверьте сайт через NginxВызовите безопасный URL: веб-ответ 200 показывает только доступность сайта. Сравните фактическое время выполнения задания и результат в приложении; только после этого считайте восстановление завершённым.
- Клиентский терминал; запрос не проверяет cron автоматическиLinux · Терминал (Bash)КомандаКлиентский терминал; запрос не проверяет cron автоматически.
curl -I https://example.com/
#Как проверить результат
В следующем запланированном цикле задача срабатывает один раз, в журнале нет ошибок, а ожидаемый результат возник (письмо в тестовый ящик, обработка одной тестовой записи). Никаких новых ошибок в журнале Nginx.
#Если проблема не устранена
Если таймер работает, а эффект отсутствует, проверьте базу, переменные окружения, доступ к сторонним API и права сервисного пользователя. Не проводите повторную массовую обработку без оценки последствий.