> For the complete documentation index, see [llms.txt](https://jack80342.gitbook.io/spring-boot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jack80342.gitbook.io/spring-boot/vi.-deploying-spring-boot-applications/61.-installing-spring-boot-applications/61.2-unix-and-linux-services/61.2.1-installation-as-an-init.d-service-system-v.md).

# 61.2.1 安装为init.d服务(System V)

如果你配置Spring Boot的Maven或Gradle插件产生一个[完全可执行jar](https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#deployment-install)，并且没有使用自定义的`embeddedLaunchScript`，那你的应用可以作为`init.d`服务使用。只要简单的建立jar到`init.d`的符号连接就能获取标准的`start`，`stop`，`restart`和`status`命令支持。

该脚本支持以下特性：

* 以拥有该jar文件的用户启动服务。
* 使用`/var/run/<appname>/<appname>.pid`跟踪应用的PID。
* 将控制台日志输出到`/var/log/<appname>.log`。

假设你在`/var/myapp`目录安装了一个Spring Boot应用，只需要建立符号连接就能将Spring Boot应用安装成`init.d`服务：

```
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
```

一旦安装成功，你就可以像平常那样启动和停止服务，例如，在一个基于Debian的系统：

```
$ service myapp start
```

**注** 如果应用启动失败，检查下`/var/log/<appname>.log`中的错误日志。

你也可以标识应用使用标准的操作系统工具自启动，例如，在Debian上：

```
$ update-rc.d myapp defaults <priority>
```

**保护init.d服务**

当使用`root`用户启动`init.d`服务时，默认的执行脚本将以拥有该jar文件的用户来运行应用。你最好不要使用`root`启动Spring Boot应用，也就是你的应用jar文件拥有者不能是`root`，而是创建一个特定用户运行应用，并使用`chown`指定该用户拥有jar文件，示例：

```
$ chown bootapp:bootapp your-app.jar
```

本示例中，默认执行脚本将使用`bootapp`用户运行应用。

**注** 为减少应用用户账号冲突，你可以考虑防止它使用登陆shell，例如将账号shell设置为`/usr/sbin/nologin`。

你也要采取措施防止修改应用jar文件，首先配置jar文件权限只能被拥有者读取和执行，不能写入：

```
$ chmod 500 your-app.jar
```

然后，你也应该采取措施限制应用或账号运行时的冲突造成的损坏。如果攻击者获取访问权，他们可能会让jar文件可写并改变它的内容，使用`chattr`让它变为不可变是唯一的保护措施：

```
$ sudo chattr +i your-app.jar
```

这会防止任何用户修改jar文件，包括root。

如果root用户用来控制应用服务，并且你[使用`.conf`文件](https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#deployment-script-customization-conf-file)自定义它的启动，该`.conf`文件将被root用户读取和评估，因此它也需要保护。使用`chmod`改变文件权限只能被拥有者读取，然后使用`chown`改变文件拥有者为root：

```
$ chmod 400 your-app.conf
$ sudo chown root:root your-app.conf
```
