備忘録

備忘録

.NET Core アプリを systemd を利用してサービス化する方法

Ⅰ. はじめに

タイトルの通り「.NET Core アプリを systemd を利用してサービス化する方法」です。
ASP.NET Core」 または 「.NET Core コンソールアプリケーション」どちらも可能です。

Ⅱ. やり方

1. ユニットファイルを作成する

/etc/systemd/system/myapp.service

[Unit]
Description=My perfect web app

[Service]
WorkingDirectory=/var/www/AspNetCoreTest
ExecStart=/usr/bin/dotnet AspNetCoreTest.dll
Restart=always
# サービス終了時、10秒後に自動再起動する
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
# 適切なユーザを指定する
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
2.起動する
# 起動する
systemctl start myapp
# サービスの自動起動を有効にする
systemctl enable myapp

実行結果

f:id:kagasu:20191213081836p:plain

ログの表示

journalctl -fu myapp
journalctl -fu myapp --since "2016-10-18 00:00" --until "2016-10-18 04:00"
// 全ログをテキストファイルとして保存する
journalctl -u myapp > log.txt

留意点

ASP.NET Core について

この記事の方法で ASP.NET Core 標準の Webサーバである Kestrel をエッジサーバとして直接公開する事は推奨されていません。
リバースプロキシを利用して Kestrel に HTTPリクエストを転送する事が推奨されています。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel#when-to-use-kestrel-with-a-reverse-proxy