日志文件不可写
Log files isn't writable
我正在使用 Docker 创建一个基于 Django 的网站。我在 Gunicorn 的日志文件管理方面遇到了问题。使用下面的脚本,站点运行没有问题:
#!/usr/bin/env bash
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
"$@"
这是我在终端上看到的:
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Starting gunicorn 20.1.0
dev_website | [2022-01-21 16:36:17 +0000] [1] [DEBUG] Arbiter booted
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Listening at: http://0.0.0.0:8301 (1)
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Using worker: sync
dev_website | [2022-01-21 16:36:17 +0000] [11] [INFO] Booting worker with pid: 11
dev_website | [2022-01-21 16:36:17 +0000] [12] [INFO] Booting worker with pid: 12
dev_website | [2022-01-21 16:36:17 +0000] [13] [INFO] Booting worker with pid: 13
dev_website | [2022-01-21 16:36:17 +0000] [1] [DEBUG] 3 workers
但是当我添加日志文件时:
#!/usr/bin/env bash
# Prepare log files and start outputting logs to stdout
touch ./logs/gunicorn.log
touch ./logs/gunicorn-access.log
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
--log-level=debug \
--error-logfile=./logs/gunicorn.log \
--access-logfile=./logs/gunicorn-access.log \
"$@"
我看到以下错误:
dev_website | Error: Error: './logs/gunicorn.log' isn't writable [FileNotFoundError(2, 'No such file or directory')]
并且站点无法运行。
错误在哪里?
我可以在项目卷中看到这两个文件。
在您的 bash 脚本中,您首先接触(创建)日志文件,然后更改工作目录。当您启动 Web 服务器时,文件不是相对于当前工作目录定位的。
换句话说,首先 运行 您的 cd
命令,然后才 2x touch
命令。
问题是我在错误的文件夹中搜索日志文件。
#!/usr/bin/env bash
# Prepare log files and start outputting logs to stdout
touch ./logs/gunicorn.log
touch ./logs/gunicorn-access.log
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
--log-level=debug \
--error-logfile=../logs/gunicorn.log \
--access-logfile=../logs/gunicorn-access.log \
"$@"
我正在使用 Docker 创建一个基于 Django 的网站。我在 Gunicorn 的日志文件管理方面遇到了问题。使用下面的脚本,站点运行没有问题:
#!/usr/bin/env bash
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
"$@"
这是我在终端上看到的:
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Starting gunicorn 20.1.0
dev_website | [2022-01-21 16:36:17 +0000] [1] [DEBUG] Arbiter booted
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Listening at: http://0.0.0.0:8301 (1)
dev_website | [2022-01-21 16:36:17 +0000] [1] [INFO] Using worker: sync
dev_website | [2022-01-21 16:36:17 +0000] [11] [INFO] Booting worker with pid: 11
dev_website | [2022-01-21 16:36:17 +0000] [12] [INFO] Booting worker with pid: 12
dev_website | [2022-01-21 16:36:17 +0000] [13] [INFO] Booting worker with pid: 13
dev_website | [2022-01-21 16:36:17 +0000] [1] [DEBUG] 3 workers
但是当我添加日志文件时:
#!/usr/bin/env bash
# Prepare log files and start outputting logs to stdout
touch ./logs/gunicorn.log
touch ./logs/gunicorn-access.log
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
--log-level=debug \
--error-logfile=./logs/gunicorn.log \
--access-logfile=./logs/gunicorn-access.log \
"$@"
我看到以下错误:
dev_website | Error: Error: './logs/gunicorn.log' isn't writable [FileNotFoundError(2, 'No such file or directory')]
并且站点无法运行。 错误在哪里? 我可以在项目卷中看到这两个文件。
在您的 bash 脚本中,您首先接触(创建)日志文件,然后更改工作目录。当您启动 Web 服务器时,文件不是相对于当前工作目录定位的。
换句话说,首先 运行 您的 cd
命令,然后才 2x touch
命令。
问题是我在错误的文件夹中搜索日志文件。
#!/usr/bin/env bash
# Prepare log files and start outputting logs to stdout
touch ./logs/gunicorn.log
touch ./logs/gunicorn-access.log
cd personal_website
exec gunicorn personal_website.wsgi:application \
--name personal_website \
--bind 0.0.0.0:"${PROJECT_PORT}" \
--workers 3 \
--log-level=debug \
--error-logfile=../logs/gunicorn.log \
--access-logfile=../logs/gunicorn-access.log \
"$@"