# Systemd

Systemd 是大多数 Linux 发行版中默认的系统和服务管理器。它通常是默认安装的，所以在支持 Swift 的发行版上无需安装。

## 配置

服务器上的每个 Vapor 应用程序都应该有自己的服务文件。对于 `Hello` 示例项目，配置文件位于 `/etc/systemd/system/hello.service`. 该文件如下所示：

```sh
[Unit]
Description=Hello
Requires=network.target
After=network.target

[Service]
Type=simple
User=vapor
Group=vapor
Restart=always
RestartSec=3
WorkingDirectory=/home/vapor/hello
ExecStart=/home/vapor/hello/.build/release/App serve --env production
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vapor-hello

[Install]
WantedBy=multi-user.target
```

正如我们的配置文件中所指定的，`Hello` 项目位于用户 `vapor` 的主文件夹中。确保 `WorkingDirectory` 指向 `Package.swift` 文件所在项目的根目录。

`--env production` 标志将禁用详细日志记录。

### 环境

此外，以下部分是可选配置，但建议使用。

你可以通过 systemd 以下面其中一种方式导出变量，或通过创建一个包含所有环境变量的文件：

```sh
EnvironmentFile=/path/to/environment/file1
EnvironmentFile=/path/to/environment/file2
```

或者你可以直接将它们添加到服务文件 `[service]` 下：

```sh
Environment="PORT=8123"
Environment="ANOTHERVALUE=/something/else"
```

在 Vapor 中可以用使用 `Environment.get` 导出变量。

```swift
let port = Environment.get("PORT")
```

## 启动

你现在可以通过 `root` 身份运行以下命令来加载、启用、启动、停止和重启你的应用程序了。

```sh
systemctl daemon-reload
systemctl enable hello
systemctl start hello
systemctl stop hello
systemctl restart hello
```
