SystemdDoctor
служба не работает php расписание права

Фоновые задания веб-приложения не выполняются

Веб-приложения на PHP выносят фоновые задания в отдельный запуск интерпретатора. Задание должно работать от пользователя веб-сервера, иначе созданные файлы окажутся недоступны приложению. Это самая частая причина того, что задания вроде бы идут, а результата нет.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Задание работает от неверного пользователя

    Файлы, созданные от root, недоступны веб-серверу. Приложение потом не может их прочитать или переписать.

  2. Используется не тот интерпретатор

    Веб-сервер и командная строка могут использовать разные сборки интерпретатора с разными настройками и расширениями.

  3. Таймер не включён

    Unit-файл задачи есть, таймера нет или он не включён. Задача не запускается никогда, а её состояние выглядит нормальным.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Включён ли таймер и когда сработает.

systemctl list-timers "nextcloud*" --all --no-pager

Что делало задание при последних запусках.

journalctl -u nextcloud-cron.service -n 30 --no-pager

Прогон задания от нужного пользователя вручную.

sudo -u www-data php -f /var/www/nextcloud/cron.php 2>&1 | head

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Задание работает от неверного пользователя
Почему происходит
Файлы, созданные от root, недоступны веб-серверу. Приложение потом не может их прочитать или переписать.
Как проверить
Посмотрите пользователя задания и владельца файлов приложения.
systemctl show nextcloud-cron.service -p User 2>/dev/null
sudo ls -ld /var/www/nextcloud/data 2>/dev/null
Как исправить
Задайте пользователя веб-сервера в unit-файле задания. Права на созданные файлы после этого будут верными.
[Service]
Type=oneshot
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
2. Используется не тот интерпретатор
Почему происходит
Веб-сервер и командная строка могут использовать разные сборки интерпретатора с разными настройками и расширениями.
Как проверить
Сравните версии и настройки.
php -v | head -2; php -i 2>/dev/null | grep -E "^Loaded Configuration" 
Как исправить
Укажите нужный исполняемый файл интерпретатора в команде запуска явно и проверьте, что расширения приложения ему доступны.
3. Таймер не включён
Почему происходит
Unit-файл задачи есть, таймера нет или он не включён. Задача не запускается никогда, а её состояние выглядит нормальным.
Как проверить
Посмотрите таймер и время срабатываний.
systemctl list-timers "nextcloud*" --all --no-pager
systemctl is-enabled nextcloud-cron.timer 2>/dev/null
Как исправить
Включите таймер и проверьте время следующего срабатывания. Включать надо таймер, а не саму задачу.
sudo systemctl enable --now nextcloud-cron.timer

Пример вывода

Задание работает от root, файлы недоступны приложению. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

systemd[1]: Starting nextcloud-cron.service - Nextcloud background jobs...
php[6400]: PHP Warning:  file_put_contents(/var/www/nextcloud/data/appdata/cache.tmp): Failed to open stream: Permission denied
systemd[1]: nextcloud-cron.service: Deactivated successfully.

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.timer(5)
    Включение таймера и время срабатываний.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено задачей от root при веб-сервере под другим пользователем.
    собственная проверка, systemd 255
    сверено 15 сентября 2026