spring-boot launch-script:如何避免pid_folder identity-subdirectory?

问题描述:

我们在service模式下使用带有嵌入式启动脚本的弹簧引导,以实现daemonized/init.d行为。spring-boot launch-script:如何避免pid_folder identity-subdirectory?

但是,我们没有/etc/init.d符号链接到弹簧引导罐,因为这需要使用sudo。我们避免sudo通过一个配置文件,环境像-Dspring.profiles.active=$APP_PROFILEJAVA_OPTS (当通过sudo开始,但在/home/appuser/.bashrc(?)定义,这将不起作用)

我们有这个目录布局一些间接引用。基本上app.jar => current/app.jar => build-xx/app.jar

[email protected]:~/apps/services$ ls 
app.jar -> /home/appuser/apps/services/current/services-1.0-SNAPSHOT.jar 
current -> /home/appuser/apps/services/services-1298 
services-1298 

当开始与app.jar start启动脚本生成在PID-夹基于该程序的“同一性”的附加的PID子目录中的应用。对我们来说,这可能是这样的:

/home/appuser/apps/services/run/services-1.0-SNAPSHOT_homeappuserappsservicesservices-1298/services.pid 

与符号链接/etc/init.d它得到特殊待遇和PID-子目录省略services-1.0-SNAPSHOT_homeappuserappsservicesservices-1298使用时不像/保持稳定。

这个动态的pid-subdir使得我们很难在部署过程中检查守护进程的状态或启动/停止,因为您必须始终顺序正确,没有人阻止您启动一个进程两次(旧实例和现在是具有新标识 - 子目录的新实例)。

那么,有没有人知道为什么这个pid-subdir-identity必须存在,我们最好的办法是什么? 我们有一个不好的设置?

任何意见赞赏。

您可以使用APP_NAME环境变量来控制身份。

我建议使用jar文件旁边的.conf文件来配置服务的环境变量。例如,如果您的应用程序名为app.jar,则应将conf文件命名为app.conf,并将其放在与jar相同的目录中。然后您可以为您的应用程序配置APP_NAMEJAVA_OPTS等。如果您愿意,这应该允许您使用init.d

+0

我们使用'.conf'并尝试使用'APP_NAME',但只能将'APP_NAME'设置为环境并且我们有几个不同的应用程序unser'/ home/appuser/apps/...'后端,前端,api等 - 这只适用于每个用户的一个应用程序,不是吗? – hotzen

+0

不可以。如果您在我的回答中建议使用.conf文件,则可以根据每个应用程序配置环境,而不考虑涉及多少用户 –

+0

这不起作用,APP_NAME无法通过conf文件条目进行配置但只能通过一个环境变量。它甚至在conf文件来源之前使用 – hotzen