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
注 如果不喜欢配置文件放到jar附近,你可以使用CONF_FOLDER
环境变量指定文件的位置。
想要学习如何正确的保护文件可以参考the guidelines for securing an init.d service.。
Last updated
Was this helpful?