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_FOLDERLOG_FOLDERLOG_FILENAME变量只对init.d服务有效。对于systemd等价的自定义方式是使用‘service’脚本。有关详细信息,请参阅服务单元配置手册页

如果JARFILEAPP_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环境变量指定文件的位置。

想要学习如何正确的保护文件可以参考the guidelines for securing an init.d service.

最后更新于