用于在python中以无特权用户身份从web服务器工作人员进行日志记录的设计模式



生成web服务器工作程序的设计模式似乎是由init脚本中的root启动,然后以无特权用户的身份生成进程。例如,我在一个init脚本中启动了一个gunicorn web服务器守护进程,如下所示:

#!/bin/sh
$LOGFILE=/var/log/gunicorn.error.log
$PIDFILE=/var/run/gunicorn.pid
[...]
gunicorn -u nobody -b 127.0.0.1:8000 
--error-logfile=$LOGFILE --pidfile=$PIDFILE -D

我可以以无特权用户的身份生成自己的脚本(请参阅此问题),但该过程不能再向/var/log写入日志文件。

如何使root进程生成的工作进程将日志文件写入/var/log,并将PID文件写入/var/run

通过在/var/log/var/run文件夹中为进程创建一个文件夹,您可以在init脚本中更改所有者和组(因为它是由root用户运行的),这样进程就可以对其进行写访问。对于/var/log,只创建一次文件夹就足够了,但每次系统重新启动时都必须重新创建/var/run文件夹。这就是我解决它的方法(为了简单起见,我在这里重新创建了两个文件夹):

DAEMON_USER='unprivilegeduser'
DAEMON_GROUP='unprivilegedgroup'
DAEMON_PID_DIR='/var/run/myprocessname'
DAEMON_LOG_DIR='/var/log/myprocessname'
PIDFILE="$DAEMON_PID_DIR/gunicorn.pid"
LOGFILE="$DAEMON_LOG_DIR/gunicorn.error.log"
mkdir -p $DAEMON_PID_DIR
mkdir -p $DAEMON_LOG_DIR
chown $DAEMON_USER:$DAEMON_GROUP $DAEMON_PID_DIR
chown $DAEMON_USER:$DAEMON_GROUP $DAEMON_LOG_DIR
[...]
gunicorn -u nobody -b 127.0.0.1:8000 
--error-logfile=$LOGFILE --pidfile=$PIDFILE -D

最新更新