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

时间:2017-08-11 11:36:47

标签: spring-boot pid launch init.d

我们在service模式下使用带有嵌入式启动程序脚本的spring-boot来实现daemonized / init.d行为。

然而,我们没有{spring}启动jar的/etc/init.d符号链接,因为需要使用sudo。我们避免sudo-Dspring.profiles.active=$APP_PROFILE中传递JAVA_OPTS这样的个人资料环境 (通过sudo启动但在/home/appuser/.bashrc(?))

中定义时,这不起作用

我们的目录布局有一些间接性。基本上是app.jar => current/app.jar => build-xx/app.jar

appuser@host:~/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启动应用程序时,launch-script会根据程序的“标识”在pid-folder中生成一个额外的pid-subdirectory。对我们来说,这可能是这样的:

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

与符号链接的/etc/init.d一起使用时,它会得到特殊处理,并且省略了pid-subdir services-1.0-SNAPSHOT_homeappuserappsservicesservices-1298 /保持稳定。

这个动态的pid-subdir让我们很难在部署期间检查守护程序的状态或启动/停止,因为你必须始终正确地执行序列,并且没有人阻止你启动进程两次(旧实例和现在带有新identity-subdir的新实例。

那么,有没有人知道为什么这个pid-subdir-identity的东西必须存在?什么是我们处理它的最佳方式? 我们的设置不好吗?

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

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