WedX - журнал о программировании и компьютерных науках

Файл журнала Laravel, созданный с помощью root:root вместо webapp:webapp

В моем приложении я использую файл laravel.log, который создается ежедневно в 00:00 UTC. Однако иногда файл создается с пользователем/группой root:root вместо обычного webapp:webapp (пользователь apache). Это приводит к сбою моего приложения, потому что приложение больше не может писать в него. Я заметил, что владелец файла может измениться после того, как файл был записан некоторое время (несколько минут).

  1. Что потенциально могло привести к изменению владельца файла после его создания?
  2. Есть ли способ в Laravel попробовать/поймать ведение журнала, чтобы приложение не вылетало из-за ошибок записи файла?

Разрешение на каталог хранилища и файлы не является проблемой, потому что оно работает нормально в течение длительного времени. Это только право собственности на файл laravel.log иногда меняется без вмешательства.


  • Вы запускаете свои crons как root? Вам следует рассмотреть возможность использования ACL в каталоге хранилища, чтобы веб-сервер всегда имел доступ. 07.05.2015
  • Похоже, что любой процесс, запускаемый ежедневно для создания файла журнала, выполняется пользователем root (или от его имени). 07.05.2015

Ответы:


1

Вы должны использовать php_sapi_name() вместо get_current_user(). Как объяснено в комментарии Джейсона к тому же ответу, который вы пытались.

Обратите внимание, что get_current_user() возвращает владельца текущего PHP-скрипта (согласно php.net), а не пользователя, который в данный момент запускает скрипт. Вместо этого я использую php_sapi_name(), который дает имя обработчика php (например, apache или cli), который будет запускаться от имени разных пользователей.

Таким образом, вы получите 2 отдельных журнала для веб-сервера и командной строки (включая прослушиватель очереди).

02.12.2015
  • Спасибо @Викас. Прошло некоторое время с момента публикации, и я внес несколько архитектурных изменений в способ реализации моей очереди и в то, как генерируются мои файлы журналов. Это больше не проблема для меня. Я использую cron для создания файлов журнала с соответствующими разрешениями заранее, чтобы они никогда не создавались с неправильным разрешением. Но я ценю ответ, он может пригодиться когда-нибудь. 03.12.2015

  • 2

    Решение найдено здесь.

    Его решение заставило меня понять, что проблема в прослушивателе очереди. В редких случаях, когда мой прослушиватель очереди срабатывает до того, как мое веб-приложение успело изменить файл журнала после полуночи UTC (в течение нескольких минут), файл создается с правами root-владельца.

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

    07.05.2015
  • Хорошо, вот сделка. Это не сработало! Я изменил имя файла на laravel. получить_текущий_пользователь(). .log, как было предложено. Мой файл журнала теперь называется laravelwebapp.log. Однако файл был создан снова с правами root:root, и по-прежнему имел имя файла laravelwebapp.log, в то время как я ожидал, что это будет laravelroot.log, когда он создавался с владельцем root. Я понятия не имею, что здесь происходит. Помогите, кто-нибудь? 08.05.2015
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]