Друзья, которые использовали Laravel, возможно, столкнулись с проблемой сбоя записи ежедневного лог-файла после установки фреймворка, далее мы обсудим причины сбоя записи лог-файла и соответствующие решения.
Прежде чем говорить об этой проблеме, может быть необходимо кратко рассказать о правах собственности и разрешениях файлов в системе Linux.
-
Ownership
-
User
Пользователь является владельцем файла, по умолчанию пользователь создает файл, а владельцем файла является пользователь.
-
Group
Группа пользователей может содержать несколько пользователей, и все пользователи, принадлежащие к этой группе, имеют одинаковые права доступа к файлам. Предположим, у вас есть проект, и многим пользователям требуется разрешение на доступ к файлу проекта. Вам не нужно вручную давать этим пользователям все разрешения. Вам нужно только добавить этих пользователей в группу и предоставить этим группам разрешение на доступ к файлам. путь Только члены группы могут читать и записывать файлы.
-
Other
Любой другой пользователь может получить доступ к файлу, поэтому предоставление разрешения другому пользователю эквивалентно предоставлению этого разрешения для всех пользователей.
-
Permission
Каждый файл и каталог в системе UNIX/Linux имеет 3 разрешения, ниже приводится обсуждение трех владельцев.
- Читать:Это разрешение дает вам право открывать и читать файл. Имея доступ для чтения к каталогу, вы можете просмотреть его содержимое.
- Напишите:Прочитайте доступ, вы можете изменить содержимое файла. Имейте разрешения на запись в каталог, вы можете добавить, удалить и переименовать файлы в этом каталоге. Рассмотрим сценарий, в котором у вас есть запись в файл, но не записать доступ к файлам, хранящимся в каталоге, вы все равно можете изменить содержимое файла, но вы не можете переименовать, перемещать и удалять файлы в каталоге.
- Выполнять:В системах Windows исполняемая программа обычно имеет суффикс .exe, и ее можно легко запустить. В UNIX/Linux вы не можете запустить программу, если вам не предоставлено разрешение на выполнение. Если разрешения на выполнение не предоставлены, вы можете просматривать и изменять программный код (предоставлены разрешения на чтение и запись), но не можете его запускать.
На приведенном выше снимке экрана показана информация о файле и папке, мы можем видеть:
-
rозначает читаемый,wпредставляет записываемый,xпредставляет собой исполняемый файл. - отображение первого файла
-, файл показываетd. - Первая картинка выше,
rw-rw-r-—середина. Первая группаrw-Указывает, что владелец файла имеет права на чтение, запись и неисполнение файла. Вторая группаrw-Указывает, что пользователь в группе, к которой принадлежит файл, имеет права на чтение, запись и неисполнение файла. Третья группаr-—Указывает, что у любого другого пользователя есть разрешения на чтение, запись и выполнение файла. -
rw-rw-r--представлен в двоичном виде как664, каждый с разрешения1, иначе0, первые триrw-представлен в двоичном виде как110Он преобразуется в десятичный6, две последние группы и так далее, и, наконец, получим664. - первая картинка выше
dior www-dataУказывает, что владельцем файла являетсяdiorпользователь, файл принадлежитwww-dataГруппа.
Мы знаем, что журналы во многих прикладных системах записываются в файлы, и файлы именуются по дате. Таким образом, пользователь, создавший журнал в первый раз, особенно важен, если файл создаетсяOnwerа такжеGroupНет, другие пользовательские триггеры для записи в файл журнала не сработают.
Далее мы обсудим, сколько разных пользователей могут создавать лог-файлы:
-
CrontabЗапланированные задачи, выполненные вCrontabПользователь, связанный с файлом, созданным в это времяOwnerа такжеGroupЗначения пользовательское и значение по умолчаниюGroup. - Некоторые резидентные фоновые процессы, такие как в Laravel
queue work, файл журнала, созданный в это времяOwnerа такжеGroupЗначения — это пользователь, выполняющий процесс, и значение по умолчанию, которому он принадлежит.Group. - Файлы журналов, созданные обычными пользователями, обращающимися к веб-сайту, файлы журналов, созданные в это время
Ownerа такжеGroupобеwww-data,www-dataПользователь — это пользователь веб-сервера по умолчанию.
Из приведенного выше анализа мы, вероятно, нашли решение проблемы.
- Разрешения для исполняющего пользователя для создания файла журнала:
664Более уместно, что требует, чтобы umask текущего пользователя был0002. - По умолчанию для текущего исполняющего пользователя
Groupдолжен быть установлен наwww-data.
Вот мое конкретное решение:
Укажите пользователя www-data для выполнения crontab:
sudo crontab -u www-data -e
Измените разрешения для создания файлов журнала в Laravel:
редактироватьconfog/logging.phpдокумент
Добавить к'permission' => 0664
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0664,
],
У вас есть лучший способ? Добро пожаловать, чтобы оставить сообщение!