Наcтройка CRON в NextCloud

Print Friendly, PDF & Email

Задача:

Настроить выполнение фоновых заданий в облачном хранилище Nextcloud

---------------------------------------------------------------

В логах nextcloud было найдено сообщение:

Последняя фоновая задача была выполнена 15 часов назад. Похоже, что-то не в порядке. Проверьте параметры выполнения фоновых задач

Соглавно документации и настроек, есть три варианта решения задачи:

AJAX — Выполнять одно задание с каждой загруженной страницей

По умолчанию Nextcloud использует метод планирования AJAX. Это самый простой, но одновременно с тем наименнее надёжный вариант. При каждом посещении пользователем web-страницы Nextcloud выполняется фоновое задание. Преимущество этого варианта в том, что он не требует ни каких дополнительных настроек. Недостатком этого механизма, что для его запуска требуется регулярное посещение страницы.

Webcron cron.php зарегистрирован в службе webcron и будет вызываться каждые 5 минут по HTTP.

в этом варианте мы регистрируем адрес скрипта cron.php, который быдет запускаться внешней веб-службой cron. Адрес скрипта если вы устанавливали без поддиректорий:

http[s]://FQDN/cron.php

(FQDN от англ. Fully Qualified Domain Name — полностью определённое имя домена)

Для настройки вы можете воспользоваться сервисом easycron.com или аналогичным. Чтобы использовать этот вариант автоматического выполнения фоновых задач на сервере, необходимо чтобы nextcloud сервер имел доступ к серверу через Интернет.

Если вам не удалось найти webcron сервис, можете воспользоваться скриптами в Google Apps Script. Скрипт будет выглядить

function nextcloudcron() {
    try {
        UrlFetchApp.fetch('https://АДРЕС ВАШЕГО СЕРВЕРА/cron.php');
    } catch (e) {}
}

Чтобы проверить правильность ссылки, откройте в любом браузере ссылки и увидите один из двух вариантов.

Скриптами гугл вы практически не ограничены, можно запускать хоть каждую минуту, обрабатывать результат и сохранять статистику.

Cron Использовать системный cron для вызова файла cron.php каждые 5 минут. cron.php должен исполняться из под пользователя «www».

Наиболее предпочитаемый вариант — это использование функции cron в операционной системе. Этот метод позволяет выполнять запланированные задания без ограничений. Тут достаточно наличие выделенного сервера (VDS, VPS и т.д ) или доступ к системному Cron.

Чтобы запустить задание cron в системе *nix, нам необходимо узнать от какого пользователя работает веб-сервер. Проверяем с помощью sockstat какой сервис слушает порты 80 и 443.

root@cloud:/ # sockstat -l | grep -E "80|443"
www      nginx      808   6  tcp6   *:443                 *:*
www      nginx      808   7  tcp4   *:443                 *:*
www      nginx      808   8  tcp4   *:80                  *:*
www      nginx      808   9  tcp6   *:80                  *:*
root     nginx      807   6  tcp6   *:443                 *:*
root     nginx      807   7  tcp4   *:443                 *:*
root     nginx      807   8  tcp4   *:80                  *:*
root     nginx      807   9  tcp6   *:80                  *:*
root     rsync      780   4  tcp6   *:873                 *:*
root     rsync      780   5  tcp4   *:873                 *:*
ntpd     ntpd       755   24 udp6   fe80::1%lo0:123       *:*
root@cloud:/ # sockstat -lw -p 443 -P tcp
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS                                 FOREIGN ADDRESS
www      nginx      808   6  tcp6   *:443                                         *:*
www      nginx      808   7  tcp4   *:443                                         *:*
root     nginx      807   6  tcp6   *:443                                         *:*
root     nginx      807   7  tcp4   *:443                                         *:*
root@cloud:/ # sockstat -lw -p 80 -P tcp
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS                                 FOREIGN ADDRESS
www      nginx      808   8  tcp4   *:80                                          *:*
www      nginx      808   9  tcp6   *:80                                          *:*
root     nginx      807   8  tcp4   *:80                                          *:*
root     nginx      807   9  tcp6   *:80                                          *:*

Если вы используете систему linux, можете восползоваться командами

netstat -tulpn | grep :80
fuser 80/tcp
fuser 443/tcp

Итак, настраивать будем cron пользователя www, на запуск вызова сценария cron.php каждый 5 минут:

crontab -u www -e

добавляем строку (кто испытывает трудности, смотрите как работает редактор vi)

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

где /var/www/nextcloud/cron.php — путь до веб-директории nextcloud, файл cron.php находится в корне. Проверяем изменения:

root@cloud:/ # crontab -u www -l
PATH=/usr/local/bin
*/15  *  *  *  * php -f /usr/local/www/nextcloud/cron.php
root@cloud:/ #

У меня путь другой. Для системы FreeBSD стандартный путь веб-диретории отличается.

Есть ещё вариант настройки через systemd, но нам он не подходит из-за использования FreeBSD. Для владельцев Linux документацию по настройке можно найти на официальном сайте.

Помогла статья? Есть возможность отблагодарить автора

QR Link:

QR Code

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *