Crontab с командами Laravel не работает

Описание

Я запускаю php /var/www/html/artisan schedule:run на cron, но это не работает.

Я добавил следующие шаги в свой Dockerfile:

FROM php:7.4.1-apache
...
RUN apt-get update && apt-get install -y cron
...
COPY ./.docker/cronjobs /etc/
RUN touch /var/www/html/schedule-run.log
RUN crontab /etc/cronjobs

Затем cron является одним из шагов CI, добавленным к .gitlab-ci.yml.

Файл ./.docker/cronjobs выглядит так:

* * * * * date >> /var/www/html/schedule-run.log
* * * * * php /var/www/html/artisan schedule:run >> /var/www/html/schedule-run.log

С первой строкой все в порядке, и я вижу вывод команды date в /var/www/html/schedule-run.log.


Проблема

Проблема во второй строке ./.docker/cronjobs, которая сообщает cron, что выполняется schedule:run каждую минуту.

Я запустил каталог php /var/www/html/artisan schedule:run >> /var/www/html/schedule-run.log в bash контейнера, затем я сказал вывод этого в /var/www/html/schedule-run.log.

Другими словами, команда в порядке, но когда cron хочет ее запустить, она не будет запущена.


Среда

Docker-compose: 1.25.4, build 8d51620a
Docker: 19.03.6
Machine: Ubuntu 18.0.4 LTS

Опыт

Я проверил следующие вопросы, но проблема не решается.

Играйте с уровнем доступа к файлу artisan. Возможно, вы можете запустить файл, но пользователь, который запускает cron - не может

Vasyl Zhuryk 15.12.2020 13:00

@VasylZhuryk Что вы подразумеваете под уровнем доступа? | Разрешение artisan равно www-data:www-data, вызывает ли оно проблему?

M. Rostami 15.12.2020 13:17

Это не разрешение, это владелец файла (и группа). Но разрешение файла может вызвать проблемы. Вы должны знать, какой пользователь запускает cron. В случае, если пользователь отличается от www-data - необходимо добавить пользователя в группу www-data или изменить пользователя, который запустит cron

Vasyl Zhuryk 15.12.2020 13:28

@VasylZhuryk Да, вы правы.

M. Rostami 15.12.2020 13:34

Попробуйте переформулировать свою запись cron, чтобы следовать примеру в документации Laravel: cd /var/www/html && php artisan schedule:run >> /var/www/html/schedule-run.log См.

KazikM 15.12.2020 14:01

@KazikM Это одно из предложений, на которые я ответил здесь, которое я добавил в раздел «Опыт». Спасибо хоть.

M. Rostami 15.12.2020 14:08

Отвечает ли это на ваш вопрос? Laravel artisan cron не работает

miken32 15.12.2020 19:19

@ miken32 Я упомянул этот ответ в вопросе, НЕТ!

M. Rostami 16.12.2020 08:45

Решение, которое вы придумали, точно такое же

miken32 16.12.2020 16:02

@ miken32 Упомянутая проблема и различие.

M. Rostami 17.12.2020 18:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
10
367
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как ни странно, это решилось следующим cron (в моем случае ./.docker/cronjobs) файлом:

# the commented sections have not worked.
#* * * * * php /var/www/html/artisan schedule:run >> /var/www/html/schedule-run.log
#* * * * * /usr/local/bin/php /var/www/html/artisan schedule:run >> /var/www/html/schedule-run.log
#* * * * * cd /var/www/html/ && /usr/local/bin/php artisan schedule:run >> /var/www/html/schedule-run.log

* * * * * cd /var/www/html/ && /usr/local/bin/php artisan schedule:run

Я предположил, что доступ к журналу вызвал проблему.

Другие вопросы по теме