Linux 上服务的管理,一般都是使用 systemctl , 因为可以方便的通过 systemctl [restart|start|stop|status] xxx.service 去起停和查看状态

配置文件的路径在 /etc/systemd/system

一般用户的普通应用程序服务,是在 multi-user.target 目录下的,可以直接用 cat 查看文件内容

举个栗子

  1. /etc/systemd/system 目录下新建一个文件
vim webapi.service
  1. 文件的格式
# Linux 一直都大小写敏感
[Unit]
Description=Dotnet Core Web API Application
# Description:简短描述
# Documentation:文档地址
# Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
# Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
# BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
# Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
# After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
# Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
# Condition...:当前 Unit 运行必须满足的条件,否则不会运行
# Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败

[Service]
WorkingDirectory=/application/app
# 1. 主程序要写完成路径。
# 2. 后续如果跟参数,都要用引号包括起来。
ExecStart=/usr/local/bin "/application/app/WebApplication.dll" "-c" "Release"
Restart=always
Type=simple
KillMode=process
RestartSec=10 # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnetcore-webapi
User=dotnet # 这个是运行 service 的用户, nginx , memcached, redis, web, www, root ... 选填项
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target
  1. 管理
# 注册:其实就是创建一个软连接,并且把文件 从 /etc/systemd/system Copy 到/etc/systemd/system/multi-user.target 目录下
systemctl enable webapi.service

# 启动:注册后不会自己启动,只启也不会自己注册
systemctl start webapi.service

# 停止
systemctl stop webapi.service
# 重启
systemctl restart webapi.service

# 删除
systemctl disable webapi.service

# 查看状态,使用的最多的命令
systemctl status webapi.service

# 查看 这个 Unit 相关的 log
journal -u webapi.service

参考

  1. http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html