ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 56.1.3 自定义启动脚本 Maven或Gradle插件生成的默认内嵌启动脚本可以通过很多方法自定义,对于大多数开发者,使用默认脚本和一些自定义通常就足够了。如果发现不能自定义需要的东西,你可以使用`embeddedLaunchScript`选项生成自己的文件。 **在脚本生成时自定义** 自定义写入jar文件的启动脚本元素是有意义的,例如,为`init.d`脚本提供`description`,既然知道这会展示到前端,你可能会在生成jar时提供它。 为了自定义写入的元素,你需要为Spring Boot Maven或Gradle插件指定`embeddedLaunchScriptProperties`选项。 以下是默认脚本支持的可代替属性: | 名称 | 描述 | | :--- | :--- | | `mode` | 脚本模式,默认为`auto` | | `initInfoProvides` | 'INIT INFO'部分的`Provides`,对于Gradle默认为`spring-boot-application`,对于Maven默认为`${project.artifactId}` | | `initInfoShortDescription` | ‘INIT INFO’部分的`Short-Description`,对于Gradle默认为`Spring Boot Application`,对于Maven默认为`${project.name}` | | `initInfoDescription` | “INIT INFO”部分的`Description`,对于Gradle默认为`Spring Boot Application`,对于Maven默认为`${project.description}`(失败会回退到`${project.name}`) | | `initInfoChkconfig` | “INIT INFO”部分的`chkconfig`,默认为`2345 99 01` | | `confFolder` | `CONF_FOLDER`的默认值,默认为包含jar的文件夹 | | `logFolder` | `LOG_FOLDER`的默认值,只对`init.d`服务有效 | | `pidFolder` | `PID_FOLDER`的默认值,只对`init.d`服务有效 | | `useStartStopDaemon` | 如果`start-stop-daemon`命令可用,它会控制该实例,默认为`true` | **在脚本运行时自定义** 对于需要在jar文件生成后自定义的项目,你可以使用环境变量或配置文件。 默认脚本支持以下环境变量: | 变量 | 描述 | | | | | :--- | :--- | :--- | :--- | :--- | | `MODE` | 操作的模式,默认值依赖于jar构建方式,通常为`auto`(意味着它会尝试通过检查它是否为`init.d`目录的软连接来推断这是不是一个init脚本)。你可以显式将它设置为`service`,这样\`stop | start | status | restart`命令就可以工作了,或如果你只是想在前台运行该脚本那只需`run\` | | `USE_START_STOP_DAEMON` | 如果`start-stop-daemon`命令可用,它将被用来控制该实例,默认为`true` | | | | | `PID_FOLDER` | pid文件夹的根目录(默认为`/var/run`) | | | | | `LOG_FOLDER` | 存放日志文件的文件夹(默认为`/var/log`) | | | | | `CONF_FOLDER` | 读取`.conf`文件的文件夹 | | | | | `LOG_FILENAME` | 存放于`LOG_FOLDER`的日志文件名(默认为`<appname>.log`) | | | | | `APP_NAME` | 应用名,如果jar运行自一个软连接,脚本会猜测它的应用名。如果不是软连接,或你想显式设置应用名,这就很有用了 | | | | | `RUN_ARGS` | 传递给程序的参数(Spring Boot应用) | | | | | `JAVA_HOME` | 默认使用`PATH`指定`java`的位置,但如果在`$JAVA_HOME/bin/java`有可执行文件,你可以通过该属性显式设置 | | | | | `JAVA_OPTS` | JVM启动时传递的配置项 | | | | | `JARFILE` | 在脚本启动没内嵌其内的jar文件时显式设置jar位置 | | | | | `DEBUG` | 如果shell实例的`-x`标识有设值,则你能轻松看到脚本的处理逻辑 | | | | **注** `PID_FOLDER`,`LOG_FOLDER`和`LOG_FILENAME`变量只对`init.d`服务有效。对于`systemd`等价的自定义方式是使用‘service’脚本。 如果`JARFILE`和`APP_NAME`出现异常,上面的设置可以使用一个`.conf`文件进行配置。该文件预期是放到跟jar文件临近的地方,并且名字相同,但后缀为`.conf`而不是`.jar`。例如,一个命名为`/var/myapp/myapp.jar`的jar将使用名为`/var/myapp/myapp.conf`的配置文件: **myapp.conf** ```text JAVA_OPTS=-Xmx1024M LOG_FOLDER=/custom/log/folder ``` **注** 如果不喜欢配置文件放到jar附近,你可以使用`CONF_FOLDER`环境变量指定文件的位置。 想要学习如何正确的保护文件可以参考[the guidelines for securing an init.d service.](https://github.com/cwiki-us-spring-guides/Spring-Boot-Reference-Guide/tree/0047aa8098a650dde0c93f4d2e91754c83468c4b/VI.%20Deploying%20Spring%20Boot%20applications/the%20guidelines%20for%20securing%20an%20init.d%20service)。