Найти в Дзене
SСhaos

Laravel ошибка "Laravel 5 permission denied when writing in log file"

Вот делаете свой безумный проект и все бы хорошо, только начинает доставать ошибка в логах. Нет прав на запись логов. Хотя все это делает laravel на linux системах. И загвоздка заключается в том, что тут нужны знания системного администратора и linux. Когда вы пользуетесь cron в linux, запускается он от имени root ( суперпользователя). Например от “рута” запущена задача по расписанию и у нее произошла ошибка, эта ошибка будет записана, в файл лога от суперпользователя, у которого больше прав в системе. После любая попытка от пользователя www-data записать информацию в log файл будет безуспешна, потому что владелец файла root. Чтобы исправить этот конфликт, все службы и сервисы laravel должны быть запущены от пользователя www-data, а именно: Так же при данной ошибке лечиться это на просторах интернета всем чем угодно, даже мантрами. Но это не всегда эффективно. Покажу самый действенный способ: sudo chown -R www-data:www-data /var/www sudo chmod -R g+rwX /var/www Подведем итог: Запуск

Вот делаете свой безумный проект и все бы хорошо, только начинает доставать ошибка в логах. Нет прав на запись логов. Хотя все это делает laravel на linux системах. И загвоздка заключается в том, что тут нужны знания системного администратора и linux.

Когда вы пользуетесь cron в linux, запускается он от имени root ( суперпользователя). Например от “рута” запущена задача по расписанию и у нее произошла ошибка, эта ошибка будет записана, в файл лога от суперпользователя, у которого больше прав в системе. После любая попытка от пользователя www-data записать информацию в log файл будет безуспешна, потому что владелец файла root.

Чтобы исправить этот конфликт, все службы и сервисы laravel должны быть запущены от пользователя www-data, а именно:

  • cron задача * * * * * www-data php /var/www/public/project/artisan top >/dev/null 2>&1
  • Любые консольные команды php artisan <command>

Так же при данной ошибке лечиться это на просторах интернета всем чем угодно, даже мантрами. Но это не всегда эффективно.

Покажу самый действенный способ:

sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

Подведем итог:

Запускаем от пользователя все задачи laravel

* * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Или редактируем cron для пользователя www-data

sudo su -c "crontab -e" www-data

Если вы пользуетесь Supervisor, то вам необходимо его, как вы уже догадались, запускать от имени пользователя www-data:

Вот вам пример конфигурационного файла:

[program:pr-processor]
command=php /var/www/laravel/artisan pr:start
autostart=true
autorestart=true
user=www-data
stderr_logfile=/var/log/pr_for_laravel.err.log
stdout_logfile=/var/log/pr_for_laravel.out.log

З.Ы. А еще мы пишем много полезной информации в блоге Стократ. Добро пожаловать.

З.З.Ы. Не забывайте ставить лайки и писать комментарии если тема Вам интересна.