运行 flask 应用程序作为当前用户而不是 root 通过主管

run flask app as current user instead of root via supervisor

我正在使用 supervisor 来调用和保持 flask 服务器 运行 控制我的网络界面是作为一个简单的录像机构建的。

Supervisor 以 root 权限调用服务器,因此当前用户将无法访问最终录制的文件,因为他需要在最后将它们转换并传输到其他地方。

是否有任何解决方案可以告诉主管 运行 flask 应用程序作为普通用户而不是 root 用户?

另一个问题是关于我为我的界面实现的实时预览。使用此选项,用户可以在开始录制之前看到 5 秒的实时预览(这是一个简单的 gstreamer 管道:gst-launch v4l2src device=/dev/video1 !jpegdec !ffmpegcolorspace

但是在重新启动系统后,当我尝试查看此预览时失败并在日志文件中显示此错误:

错误:来自元素/GstPipeline:pipeline0/GstXImageSink:ximagesink0:无法初始化 X 输出 附加调试信息: ximagesink.c(1284): gst_ximagesink_xcontext_get (): /GstPipeline:pipeline0/GstXImageSink:ximagesink0: 无法打开显示 ./testWebcam.sh: 5: kill: 没有这样的进程

这是我的主管配置文件 /etc/supervisor/conf.d/RunFlask.conf:

[program:flask_app]                                                                     
command = python main.py                                      
directory = /dir/to/your/app                            
autostart =     true                                                                
autorestart = true

为了完整起见,这里是我用来记录的 gstreamer 管道:

nohup gst-launch-1.0 v4l2src do-timestamp=true device=/dev/video0  ! 'video/x-raw,format=BGR,width=1024,height=768'  ! videoconvert ! queue ! x264enc ! mux.  pulsesrc device="alsa_input.usb-Samson_Technologies_Samson_Go_Mic_Direct-00-Direct.analog-stereo" !  'audio/x-raw,rate=88200,channels=1,depth=24' !  audioconvert  !  avenc_aac compliance=experimental ! mux. matroskamux name="mux"  ! filesink location=/home/sina/Desktop/Recordings/Screen.mp4  v4l2src device=/dev/video1 ! videorate  ! 'image/jpeg,framerate=30/1,width=1920,height=1080' ! queue ! mux2. pulsesrc device="alsa_input.usb-046d_Logitech_Webcam_C930e_AAF8A63E-02-C930e.analog-stereo" ! 'audio/x-raw,rate=44100,channels=1,depth=24' !  audioconvert !  avenc_aac compliance=experimental ! queue ! mux2.  matroskamux name="mux2" !   filesink location=/home/sina/Desktop/Recordings/Webcam.mkv & 

您可以在主管配置中指定一个用户:

[program:flask_app]
user=yourusername

这将 运行 给定用户下的 Flask 应用程序。