Друзья, которые использовали 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,
],
У вас есть лучший способ? Добро пожаловать, чтобы оставить сообщение!