在Linux上用supervisor运行ASP.NET Core站点的一个坑
将一个ASP.NET Core站点在Linux服务器上以self-contained部署方式发布出来后,直接在终端上运行下面的命令,站点可以正常运行。
/data/AboutUs/bin/Debug/netcoreapp1.0/ubuntu.14.04-x64/publish/AboutUs
但是通过supervisor以服务方式运行却失败:
# supervisorctl status aboutus FATAL Exited too quickly (process log may have details)
查看错误日志发现是因为找不到appsettings.json文件:
# supervisorctl tail aboutus 'appsettings.json' was not found and is not optional. at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
可appsettings.json文件明明就在那里。
在supervisor中是这样配置这个服务的( /etc/supervisor/conf.d/aboutus.conf ):
[program:aboutus] command=/data/AboutUs/bin/Debug/netcoreapp1.0/ubuntu.14.04-x64/publish/AboutUs autostart=true autorestart=true stderr_logfile=/var/log/aboutus.err.log stdout_logfile=/var/log/aboutus.out.log environment=Hosting__Environment=Production user=root stopsignal=INT redirect_stderr=true
和在终端中运行的命令没区别,为什么在supervisor中以服务运行就不行呢?
。。。
后来想到,既然找不到appsettings.json文件,肯定是没在"/data/AboutUs/bin/Debug/netcoreapp1.0/ubuntu.14.04-x64/publish"这个路径中找,那我把当前路径设为这个路径也许能解决问题,于是在"/etc/supervisor/conf.d/aboutus.conf"添加了如下的1行配置:
directory=/data/AboutUs/bin/Debug/netcoreapp1.0/ubuntu.14.04-x64/publish
重启supervisor服务之后,问题解决。
# service supervisor restart Restarting supervisor: supervisord. # supervisorctl status aboutus RUNNING pid 1941, uptime 0:00:02
[相关博文]