Grav-plugin-admin: Веб-интерфейс сообщает, что "Cron недоступен", но он работает

Созданный на 26 авг. 2019  ·  4Комментарии  ·  Источник: getgrav/grav-plugin-admin

Я установил свой собственный образ Docker для запуска Grav, но есть только одна проблема, которую я, кажется, не могу понять, а именно то, что веб-интерфейс говорит, что Cron недоступен, но все же, похоже, он работает просто хорошо, насколько я могу судить.

Это предупреждение, которое я пытаюсь исправить:
Grav - Cron not available

У меня crontab работает под пользователем nginx, который, кажется, работает нормально:
Grav - Backups Still Running

Используя CLI, я могу проверить, что nginx имеет правильный crontab:
Grav - Crontab installed for nginx

И чтобы посмотреть, будет ли это иметь значение, я также добавил его к пользователю root:
Grav - Crontab installed for root
... Но в веб-интерфейсе по-прежнему отображается то же предупреждение.

Интерфейс командной строки также показывает, что выполняется резервное копирование:
Grav Scheduler

Я не совсем уверен, что еще я могу сделать, чтобы исправить это предупреждение.

Мой Dockerfile:

FROM nginx:stable-alpine
LABEL maintainer="William Miceli <[email protected]>"
USER root

ARG GRAV_VERSION

# Install Dependencies Needed For Grav, With Optional Modules To Help With Performance
RUN apk update && apk add --no-cache \
    dcron \
    php7 \
    php7-curl \
    php7-dom \
    php7-fpm \
    php7-gd \
    php7-json \
    php7-mbstring \
    php7-openssl \
    php7-pecl-apcu \
    php7-pecl-yaml \
    php7-session \
    php7-simplexml \
    php7-xml \
    php7-zip

# Configure NGINX For Grav
ADD https://raw.githubusercontent.com/getgrav/grav/c381bc83040e00c9a8ebe91ac3bda5fe0c217197/webserver-configs/nginx.conf /etc/nginx/conf.d/default.conf
RUN sed -i 's/root \/home\/USER\/www\/html/root \/var\/www/g' /etc/nginx/conf.d/default.conf \
    && sed -i 's/fastcgi_pass unix:\/var\/run\/php\/php7.2-fpm.sock;/fastcgi_pass unix:\/var\/run\/php-fpm.sock;/g' /etc/nginx/conf.d/default.conf \
    && sed -i 's/#listen 80;/listen 80;/g' /etc/nginx/conf.d/default.conf \
    && sed -i '23cuser = nginx' /etc/php7/php-fpm.d/www.conf \
    && sed -i '24cgroup = nginx' /etc/php7/php-fpm.d/www.conf \
    && sed -i '47clisten.owner = nginx' /etc/php7/php-fpm.d/www.conf \
    && sed -i '48clisten.group = nginx' /etc/php7/php-fpm.d/www.conf \
    && sed -i '49clisten.mode = 0660' /etc/php7/php-fpm.d/www.conf \
    && sed -i 's/listen = 127.0.0.1:9000/listen = \/var\/run\/php-fpm.sock/g' /etc/php7/php-fpm.d/www.conf

# Setup Cron
RUN (crontab -u nginx -l; echo "* * * * * cd /var/www;/usr/bin/php bin/grav scheduler 1>> /dev/null 2>&1") | crontab -u nginx -

# Prepare Grav Files
RUN mkdir -p /var/www /usr/src/grav/user \
    && apk add --no-cache ca-certificates \
    && apk add --no-cache --virtual .install-dependencies unzip wget \
    && wget -P /var/www https://github.com/getgrav/grav/releases/download/${GRAV_VERSION}/grav-admin-v${GRAV_VERSION}.zip \
    && unzip -q /var/www/grav-admin-v${GRAV_VERSION}.zip -d /var/www \
    && rm /var/www/grav-admin-v${GRAV_VERSION}.zip \
    && mv -v /var/www/grav-admin/* /var/www \
    && rm -rfv /var/www/grav-admin \
    && apk del .install-dependencies \
    && chown -R nginx:nginx /var/www \
    && mv -v /var/www/user/* /usr/src/grav/user

COPY /entrypoint.sh /

EXPOSE 80
CMD ["/bin/sh", "/entrypoint.sh"]

Репозиторий Git

Спасибо за помощь!!

evaluating

Самый полезный комментарий

Первое, что нужно проверить, - это то, с каким пользователем работает «веб-сервер» по сравнению с тем, когда вы находитесь в терминале. Если это разные пользователи, у вас возникнет эта проблема. Веб-сервер может проверять crontab только того пользователя, от имени которого он работает. Кроме того, версия PHP - это «лучшее предположение», которое делает команда процесса symfony при попытке определить, какой двоичный файл PHP использовать. Недостаточно умен, чтобы использовать конкретную версию, как будто у вас есть установка ( php7 ).

Все 4 Комментарий

Кроме того, я случайно заметил небольшую вещь, но, похоже, не имеет никакого значения:

CLI говорит, что crontab:
(crontab -l; echo "* * * * * cd /var/www;/usr/bin/php7 bin/grav scheduler 1>> /dev/null 2>&1") | crontab -
В то время как веб-интерфейс говорит:
(crontab -l; echo "* * * * * cd /var/www;/usr/bin/php bin/grav scheduler 1>> /dev/null 2>&1") | crontab -
(Один - /usr/bin/php7 , другой - /usr/bin/php )

Не знаю, имеет ли это какое-то значение, но решил, что упомяну.

Первое, что нужно проверить, - это то, с каким пользователем работает «веб-сервер» по сравнению с тем, когда вы находитесь в терминале. Если это разные пользователи, у вас возникнет эта проблема. Веб-сервер может проверять crontab только того пользователя, от имени которого он работает. Кроме того, версия PHP - это «лучшее предположение», которое делает команда процесса symfony при попытке определить, какой двоичный файл PHP использовать. Недостаточно умен, чтобы использовать конкретную версию, как будто у вас есть установка ( php7 ).

В моем /etc/nginx/nginx.conf меня есть:
2019-08-27 21_12_52-Rancher - Brave

Таким образом, пользователь веб-сервера, похоже, nginx, у которого установлен crontab.

Где я мог бы пропасть?

Я также получаю это при установке Debian 10, где мой crontab работает как root, а веб-сервер - это www-data.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги