【发布时间】:2019-04-11 23:02:53
【问题描述】:
我在 Digital Ocean 的不同服务器 (Droplets) 中有一些 Java 应用程序,主要是 Spring Boot。以前我手动上传每个新版本并创建了一些 shell 脚本,我能够启动/停止应用程序。当测试或生产环境需要时,这些脚本包含环境变量。为了检查应用程序是否正在运行,我每 5 分钟启动一个 cronjob,如果应用程序没有运行,这个 cronjob 会执行一个 shell 脚本来启动应用程序。
但是我切换到使用 Bitbucket 管道的自动部署,现在我不再有 shell 脚本,因为所有配置都将由 Bitbucket 管道提供,并将通过 SSH 执行。
例如cat environment.sh start.sh | ssh xxx@yyy,其中environment.sh 是由管道在当时为每个环境使用正确配置动态创建的。
如果应用程序没有运行,我怎样才能自动启动它?我应该在每个自动部署中上传脚本文件并使用 cronjob 吗?
【问题讨论】:
-
我认为使用脚本是合理的。但是,如果您的 Linux 环境支持
systemd,最好使用它的工具,特别是自动重启的targets。我在以前的工作中这样做了 -
所有环境变量都将通过 Bitbucket 管道设置进行管理,以集中它并避免手动更新服务器上的文件。所以你的建议是将它上传到服务器,以便能够像我以前一样创建新的 cronjob。正确的?我不了解 systemd,但我会尝试检查。
-
是的,但没有 cron。 Linux 中基本上有两种初始化系统:
initd(较旧)和较新的systemd。两者都可以在没有 cron 的情况下重新启动应用程序 -
我用一个样本创建了一个 GIST,但是我不确定这是否可以,因为我现在无法测试它:gist.github.com/fjtorres/de082ad90d0ff6bbb7db843a16ece7f1
-
类似这样的东西,但是,我不确定环境。变量将以这种方式注入。仔细检查一下。感谢学习速度!
标签: java shell ssh bitbucket-pipelines