昨天我们成功的把 API 程序布署到 GCP 的 VM 上了。不过,我们有一个问题:只要跑了 .NET 程序,这个 SSH 连线就被占用了,如果要做其他事就得 ctrl+c 停止 API 程序。这种不方便的事我们当然不允许,今天我们就来把 API 程序包成 Linux service,让 Linux 的 systemd 帮我们管理我们的程序。
systemd 是现在主流 Linux 版本的服务管理程序,它能帮我们启动、监控、停止与管理服务,甚至可以在程序挂掉的时候尝试重启服务。在把我们的程序托管给 systemd 之前,我们必须先建立代表我们 API 程序的 service unit
sudo touch /etc/systemd/system/ironman_api.service
再来,因为 service unit 会需要我们发布完的档案,所以先来手动发布一下我们的专案
cd /ironman/dotnet_api/IThomeIronman/ # 跳到 API 专案的资料夹
sudo dotnet publish -c Release # 执行 .NET CLI, 以 Release 模式发布方案
接着,用 vim 打开这个 service 档案
sudo vi /etc/systemd/system/ironman_api.service
写入 service unit 资讯
[Unit]
Description=IThome 2021 ironman API
[Service]
WorkingDirectory=/ironman/dotnet_api/IThomeIronman/Ithome_2021_API/bin/Release/net5.0/
ExecStart=/usr/bin/dotnet /ironman/dotnet_api/IThomeIronman/Ithome_2021_API/bin/Release/net5.0/Ithome_2021_API.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-ironman-api
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:80;https://0.0.0.0:443
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
上面的设定档各个参数解释如下:
no
建好 service unit 档案之後,就能用下面这个指令叫 systemd 帮我们启动、管理我们的 API 程序。
sudo systemctl start ironman_api.service
systemctrl 是用来管理 service 的指令,start 代表启动,後面的 ironman_api.service 是我们放在 /etc/systemd/system/ 资料夹底下建立的 service unit
启动後,我们可以用 status 指令来检查这个 service 的状况,如果亮绿灯就代表成功跑起来了。
sudo systemctl status ironman_api.service
启动完 service,再一次到浏览器输入 https://外部IP/api/User ,可以看到我们的 API 在正常发挥。
全部 OK 之後,我们要来设定「随着系统启动」,之前的Restart=always
虽然会在程序挂掉的时候自动尝试重启,但是如果 VM 关机或重开机它就会停掉。虽然我们有设定WantedBy=multi-user.target
,但我们还需要一个指令把我们的 service 加到自动启动名单
sudo systemctl enable ironman_api.service
最後分享几个常用的指令:
systemctl stop ironman_api.service
systemctl restart ironman_api.service
journalctl -fu ironman_api.service
当程序有 bug 挂掉的时候,输入这个指令就会看到喷错然後重启,然後再喷错再重启XD
大家安安,欢迎来到铁人赛的第15天! 不知不觉已经过完一半了,再努力坚持下去吧! 昨天已经将网站的原...
因为疫情的关系,学校从5月中旬就开始了远(ㄕㄨˇ)距(ㄐㄧㄚˋ) 各级学校除了最开始的设备、网路问题...
终於第十天了呀,我觉得要撑满30天好难,奇怪了我为甚麽要这麽勉强自己,压力爆棚压 题号:75 标题:...
双胞胎有同卵双生或异卵双生,孪生网路当然也要有 今天开始我们将谈谈如何让网路去学习辨识不同的人脸,...