在Ubuntu上托管.NET Core应用遇终端占用问题求助
解决Ubuntu上.NET Core应用终端被占用的问题
嘿,我懂你现在的困扰——运行dotnet命令后终端直接被占死,没法执行其他操作对吧?这是因为进程默认在前台运行,下面给你几个从简单到规范的解决办法,按需选就行:
方法一:用nohup快速让进程后台运行
这是最省事的临时解决方案,直接把你的命令改成这样:
nohup dotnet /home/bourdain/website/FrutaMargemCore/bin/Release/netcoreapp2.0/FrutaMargemCore.dll &
- 末尾的
&会把进程丢到后台执行,终端瞬间解放 nohup的作用是:就算你关闭当前终端窗口,进程也不会跟着终止- 应用的日志默认会写到当前目录下的
nohup.out文件里,想实时看日志可以用tail -f nohup.out
方法二:用终端复用工具(screen/tmux)
如果你之后还需要随时回到进程的终端界面查看日志或者调试,推荐用screen:
- 先安装screen:
sudo apt update && sudo apt install screen
- 创建一个专属的screen会话:
screen -S dotnet_app
- 在这个新会话里正常运行你的
dotnet启动命令 - 按下
Ctrl+A再按D,就能脱离这个会话回到原终端,进程会在后台持续运行 - 之后想重新进入这个会话查看状态,输入:
screen -r dotnet_app
记不清会话名的话,用screen -ls可以列出所有活跃的screen会话
方法三:配置成systemd服务(生产环境首选)
如果你的应用需要长期稳定运行、开机自动启动,把它做成systemd服务是最规范的做法:
- 创建服务配置文件:
sudo nano /etc/systemd/system/frutamargemcore.service
- 粘贴以下内容(注意替换成你的实际用户和路径):
[Unit] Description=FrutaMargemCore .NET Core Application After=network.target [Service] User=bourdain WorkingDirectory=/home/bourdain/website/FrutaMargemCore/bin/Release/netcoreapp2.0 ExecStart=/usr/bin/dotnet /home/bourdain/website/FrutaMargemCore/bin/Release/netcoreapp2.0/FrutaMargemCore.dll Restart=always RestartSec=10 SyslogIdentifier=frutamargemcore [Install] WantedBy=multi-user.target
- 保存并退出编辑器(nano里按
Ctrl+O回车,再按Ctrl+X) - 重新加载systemd配置:
sudo systemctl daemon-reload
- 启动服务:
sudo systemctl start frutamargemcore
- 设置开机自启:
sudo systemctl enable frutamargemcore
- 查看服务状态和日志:
# 查看当前服务状态 sudo systemctl status frutamargemcore # 实时查看应用日志 journalctl -u frutamargemcore -f
小补充:进程管理常用命令
- 查看正在运行的dotnet进程:
ps aux | grep dotnet - 终止指定进程:
kill <进程ID>(把<进程ID>换成你查到的数字)
内容的提问来源于stack exchange,提问作者RedNet
相关产品推荐
相关产品推荐

