我有一个 python 我们的应用程序,www-data
出于安全目的(不是在root
)下执行。其中一个进程可以生成特定于应用程序的日志文件,我想将此文件放在某个地方。正如我所注意到的,/var/log
拥有root
所有者和drwxr-xr-x
权利,因此我的非root
应用程序无法在此处写入日志。在这种情况下,写入日志的正确位置是什么?我是否需要www-data
用日志(如~/.myapp.log
)清除主文件夹或者它是一些可用的惯用解决方案?
我有一个 python 我们的应用程序,www-data
出于安全目的(不是在root
)下执行。其中一个进程可以生成特定于应用程序的日志文件,我想将此文件放在某个地方。正如我所注意到的,/var/log
拥有root
所有者和drwxr-xr-x
权利,因此我的非root
应用程序无法在此处写入日志。在这种情况下,写入日志的正确位置是什么?我是否需要www-data
用日志(如~/.myapp.log
)清除主文件夹或者它是一些可用的惯用解决方案?
这就是
/dev/log
目的。您可以配置 syslog 守护程序以将消息从您的应用程序重定向到您喜欢的任何文件。从 python 中,这应该像调用
syslog.syslog
.您的应用程序可能不应该以
www-data
. 为它创建一个新的系统用户——--system
如果你正在使用的话可以选择adduser
——并将它的文件放在/srv/yourapp
. 然后你可以为它创建一个日志目录,比如/var/log/yourapp
,或者把日志放在/srv/yourapp/logs
.这样,您的网络服务器运行为
www-data
,您的应用程序运行为yourapp
,并且您可以从 root 启动两者。例如,user www-data;
在其配置中使用带选项的 nginx,并使用适当的选项将您的应用程序作为 uWSGI(它是一个应用程序容器服务器)应用程序运行在你的应用程序的 .ini 配置中
/etc/uwsgi/apps-enabled/
。uWSGI 配置反映了 nginx 配置的风格。您在中创建应用程序配置文件/etc/uwsgi/apps-available/
并将它们符号链接到/etc/uwsgi/apps-enabled/
. 其他一切都应由您的发行版处理。据我所知,这是规范的方法。至少对于 Ubuntu 和 python webapps。它使一般管理更简单:启动脚本应按预期工作,无需任何特殊的自定义编辑,更新不应破坏任何东西……通常的好处。
作为一个更具体的例子,我有一个 MoinMoin wiki 作为 uWSGI 应用程序运行在 Ubuntu 上的 nginx 后面。
来自 nginx 站点:
来自 uWSGI moin.ini:
所有其他设置完全默认(
usr/share/uwsgi/conf/default.ini
对我来说)MoinMoin 有自己独立的用户
而且,因为它是从存储库安装的,就像其他所有东西(nginx、uwsgi)一样,剩余的配置在
/etc/moin/
.