"Can't drop privilege as nonroot user"

2,457 阅读1分钟

问题:

  在使用supervisor给ASP.Net Core配置守护进程的时候,在终端上使用supervisorctl命令查看,应用报错如下:


  查看在/etc/supervisor/supervisord.conf配置文件中配置的日志文件/var/log/supervisord.log


  看这个报错还是看不出具体原因,再查看在/etc/supervisor/conf.d/DataMining.conf配置文件中配置的日志文件/var/log/DataMining.err.log


  发现,实际报错是"Can't drop privilege as nonroot user"

原因:

  在/etc/supervisor/conf.d/DataMining.conf配置文件中配置了任务程序运行的用户是root,但实际登录系统的用户是user,导致该报错

[program:DataMining]
command=dotnet AngularDemo01.dll ;
directory=/usr/publish/DataMining/netcoreapp3.1/publish/ ;
autorestart=true ;
stderr_logfile=/var/log/DataMining.err.log ;
stdout_logfile=/var/log/DataMining.out.log ;
environment=ASPNETCORE_ENVIRONMENT=Production ;
user=root ; 
stopsignal=INT

解决方案:

  将/etc/supervisor/conf.d/DataMining.conf配置文件的user修改为当前登录的用户即可

[program:DataMining]
command=dotnet AngularDemo01.dll ;
directory=/usr/publish/DataMining/netcoreapp3.1/publish/ ;
autorestart=true ;
stderr_logfile=/var/log/DataMining.err.log ;
stdout_logfile=/var/log/DataMining.out.log ;
environment=ASPNETCORE_ENVIRONMENT=Production ;
user=user ; 
stopsignal=INT

  如果supervisord启动的环境中包含了变量USER并且它被设置为当前用户,还可以将配置文件中的user配置为当前登录用户

user=%(ENV_USER)s