.net 程序部署到centos 7上运行

导读:本篇文章讲解 .net 程序部署到centos 7上运行,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

打开配置文件 appsettings.json,将日志文件保存路径中的 \ 改为 /,这是因为 Windows 中使用反斜杠 \ 来表示目录,而 Linux 中使用正斜杠 / 来表示目录。

.net 程序部署到centos 7上运行

发布程序

dotnet publish -c Release -r linux-x64 -o c:\test\linux

将文件夹 C:\test\linux 下的文件压缩为 linux.zip。

打开 Xshell 工具,连接到一台 Linux 测试机(我的测试机操作系统为 CentOS 7.3),在测试机上新建 /srv/Worker 目录:

mkdir /srv/Worker

使用 rz 命令将 linux.zip 复制到测试机,然后在测试机上解压 linux.zip 到 /srv/Worker 目录:

unzip linux.zip -d /srv/Worker

为我们的应用程序分配可执行权限,并运行:

# 分配可执行权限
chmod +x /srv/Worker/MyService
# 运行
/srv/Worker/MyService

按下 Ctrl+C 关闭应用,等待关闭前必须完成的任务正常结束后,应用退出。输入 ls /srv/Worker 命令回车,您会看到在该目录下多了一个 Logs 目录,日志文件输出正常。

以上只是以控制台运行,如果需要作为服务,还要执行以下操作。

为了让我们的 Worker 监听来自 Systemd 的启动和停止信号,我们需要添加 Microsoft.Extensions.Hosting.Systemd NuGet 包,然后修改代码

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseSystemd() // Sets the host lifetime to Microsoft.Extensions.Hosting.Systemd.SystemdLifetime...
        .ConfigureServices((hostContext, services) =>
        {
            services.AddHostedService<Worker>();
        })
        .UseSerilog(); //将 Serilog 设置为日志提供程序

然后重新发布一遍。

接下来我们需要创建配置文件,将服务的有关信息告知 systemd,以便它知道如何运行此服务。为此,我们需要创建一个 .service 文件,我们将在注册和运行此服务的 Linux 机器上使用该文件。

在我们的项目中创建一个名为 MyService.service 的服务单元配置文件,内容如下

[Unit]
Description=Long running service/daemon created from .NET worker template

[Service]
# The systemd service file must be configured with Type=notify to enable notifications.
Type=notify
# will set the Current Working Directory (CWD). Worker service will have issues without this setting
WorkingDirectory=/srv/Worker
# systemd will run this executable to start the service
ExecStart=/srv/Worker/MyService
# to query logs using journalctl, set a logical name here  
SyslogIdentifier=MyService

# Use your username to keep things simple.
# If you pick a different user, make sure dotnet and all permissions are set correctly to run the app
# To update permissions, use 'chown yourusername -R /srv/Worker' to take ownership of the folder and files,
#       Use 'chmod +x /srv/Worker/MyService' to allow execution of the executable file
User=yourusername

# This environment variable is necessary when dotnet isn't loaded for the specified user.
# To figure out this value, run 'env | grep DOTNET_ROOT' when dotnet has been loaded into your shell.
Environment=DOTNET_ROOT=/usr/share/dotnet/dotnet

# This gives time to MyService to shutdown gracefully.
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target

使用时应将 User=yourusername 项中的 yourusername 改为具体的 linux 系统的登录名

Systemd 期望所有的配置文件放置在 /etc/systemd/system/ 目录下,我们打开此目录,并使用 rz 命令将服务配置文件复制到 /etc/systemd/system/MyService.service

cd /etc/systemd/system/
rz

然后执行以下命令让 systemd 重新加载配置文件:

systemctl daemon-reload

之后,可以运行以下命令来检查 systemd 是否识别了我们的服务:

systemctl status MyService

结果显示如下:

.net 程序部署到centos 7上运行

这表明我们注册的新服务被禁用了,可以通过运行以下命令来启动它: 

systemctl start MyService

重新运行 systemctl status MyService 命令查看服务状态,显示如下:

.net 程序部署到centos 7上运行

 停止服务可以运行以下命令:

systemctl stop MyService

如果您希望该服务在开机时自动启动,那么可以运行以下命令:

systemctl enable MyService

禁用开机自动启动,可以运行以下命令:

systemctl disable MyService

查看服务是否开机自动启动,可以运行以下命令:

systemctl is-enabled MyService

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/51806.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!