Я запускаю 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
Я проверил следующие вопросы, но проблема не решается.
@VasylZhuryk Что вы подразумеваете под уровнем доступа? | Разрешение artisan
равно www-data:www-data
, вызывает ли оно проблему?
Это не разрешение, это владелец файла (и группа). Но разрешение файла может вызвать проблемы. Вы должны знать, какой пользователь запускает cron. В случае, если пользователь отличается от www-data
- необходимо добавить пользователя в группу www-data
или изменить пользователя, который запустит cron
@VasylZhuryk Да, вы правы.
Попробуйте переформулировать свою запись cron, чтобы следовать примеру в документации Laravel: cd /var/www/html && php artisan schedule:run >> /var/www/html/schedule-run.log
См.
@KazikM Это одно из предложений, на которые я ответил здесь, которое я добавил в раздел «Опыт». Спасибо хоть.
Отвечает ли это на ваш вопрос? Laravel artisan cron не работает
@ miken32 Я упомянул этот ответ в вопросе, НЕТ!
Решение, которое вы придумали, точно такое же
@ miken32 Упомянутая проблема и различие.
Как ни странно, это решилось следующим 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
Я предположил, что доступ к журналу вызвал проблему.
Играйте с уровнем доступа к файлу
artisan
. Возможно, вы можете запустить файл, но пользователь, который запускает cron - не может