61.2.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} |
initInfoRequiredStart | 'INIT INFO'部分的 Required-Start ,默认为$remote_fs $syslog $network |
initInfoRequiredStop | 'INIT INFO'部分的 Required-Stop ,默认为$remote_fs $syslog $network |
initInfoDefaultStart | 'INIT INFO'部分的 Default-Start ,默认为2 3 4 5 |
initInfoDefaultStop | 'INIT INFO'部分的 Default-Stop ,默认为0 1 6 |
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的文件夹 |
inlinedConfScript | 对应该内联到默认启动脚本中的文件脚本的引用。这可以用来在加载任何外部配置文件之前设置环境变量,比如 JAVA_OPTS |
logFolder | LOG_FOLDER 的默认值,只对init.d 服务有效 |
logFilename | LOG_FILENAME 的默认值,只对init.d 服务有效 |
pidFolder | PID_FOLDER 的默认值,只对init.d 服务有效 |
pidFilename | PID_FOLDER 里pid文件名的默认值,只对init.d 服务有效 |
useStartStopDaemon | 如果 start-stop-daemon 命令可用,它会控制该实例,默认为true |
stopWaitTime | STOP_WAIT_TIME 的默认值,只对init.d 服务有效。默认到60秒 |
在脚本运行时自定义
对于需要在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 标识有设值,则你能轻松看到脚本的处理逻辑 | | | |
STOP_WAIT_TIME | 强制关闭应用之前的等待时间,单位为秒(默认为 60 秒) | | | |
注
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
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/custom/log/folder
注 如果不喜欢配置文件放到jar附近,你可以使用
CONF_FOLDER
环境变量指定文件的位置。最近更新 3yr ago