【发布时间】:2019-01-18 09:34:52
【问题描述】:
我正在尝试将服务器服务部署到 AWS EC2 实例。该服务基本上是一个永远运行的消费者。
要在 AWS 上部署,我似乎需要指定以下文件:
- 应用规范
- 安装前
- 安装后
- 应用开始
- 应用程序停止
我在编写 applicationStart 和 applicationStop 脚本时遇到问题。
我的程序是一个 java jar 文件,我使用java -jar consumer.jar 执行它。所以一开始我写applicationStart和applicationStop如下:
应用开始:
java -jar consumer.jar
应用程序停止:
exit 0
这是 appspec 文件的 sn-p
hooks:
ApplicationStop:
- location: script/deploy/stop-application.sh
timeout: 30
runas: root
BeforeInstall:
- location: script/deploy/before-install.sh
timeout: 30
runas: root
AfterInstall:
- location: script/deploy/after-install.sh
timeout: 30
runas: services
ApplicationStart:
- location: script/deploy/start-application.sh
timeout: 30
runas: root
ValidateService:
- location: script/deploy/validate-application.sh
timeout: 30
runas: root
当我将代码部署到 AWS 时,我发现 java 程序一直在运行,并且 applicationStart 阶段最终超时。我认为这可能是因为 java 程序不会返回,因此 applicationStart 根本没有完成。因此,我将 startApplication(或脚本 start-application.sh)更改为这样
nohup java -jar consumer.jar &
这次 startApplication 阶段没有超时。相反,它需要 3 分钟才能成功。为什么它没有超时,因为我的超时设置为 30 秒?并且部署卡在AllowTraffic阶段,最后花了1小时才超时。
关于如何在程序永远运行时编写 applicationStart 和 applicationStop 脚本有什么建议吗?任何建议将不胜感激!
【问题讨论】:
标签: java amazon-web-services amazon-ec2 deployment