play 框架
我编写了一个Shell脚本来控制使用内置命令dist
打包的Play框架应用程序。 以这种方式打包的应用程序是独立的压缩发行版,而无需在应该运行的计算机上安装Play框架。 所需的一切都在包装内。 在zip的bin目录中,有一个可执行的Shell脚本,其名称与您的应用程序相同。 您可以通过运行此脚本来启动应用程序。 这就是全部,但我想要更多。
脚本设置
从GitHub下载脚本并使其可执行:
chmod +x ./dist-play-app-initd
在运行脚本之前,您必须设置NAME , PORT和APP_DIR变量的值。
- NAME –应用程序的名称,必须与Play框架生成的外壳脚本的名称相同才能运行该应用程序
- PORT –应用程序应运行的端口号
- APP_DIR –解压缩打包应用程序的目录的路径
让我们以我的辅助项目Jugjane为例。 我运行了“ play dist
”,它生成了“ jugjane-1.1-SNAPSHOT.zip ”文件。 如果将其解压缩,则会得到一个名为“ jugjane-1.1-SNAPSHOT ”的目录,该目录将移至“ /home/rado/bin/jugjane-1.1-SNAPSHOT ”。 Play框架生成的shell脚本为“ /home/rado/bin/jugjane-1.1-SNAPSHOT/bin/jugjane ”。 我想在端口9000上运行该应用程序。我的值是:
NAME=jugjane
PORT=9000
APP_DIR=/home/rado/bin/jugjane-1.1-SNAPSHOT
启动,停止,重新启动并检查状态
现在,我可以方便地将我的Play应用程序作为守护程序运行。 让我们运行它。
开始
要启动我的Jugjane应用程序,我只需运行以下命令:
$ ./dist-play-app-initd start
Starting jugjane at port 9000... OK [PID=6564]
重新开始
$ ./dist-play-app-initd restart
Stopping jugjane... OK [PID=6564 stopped]
Starting jugjane at port 9000... OK [PID=6677]
状态
$ ./dist-play-app-initd status
Checking jugjane at port 9000... OK [PID=6677 running]
停止
$ ./dist-play-app-initd stop
Stopping jugjane... OK [PID=6677 stopped]
机器启动时启动您的应用程序
这取决于您的操作系统,但是通常您需要将此脚本移至/etc/init.d目录。
实施细节
该脚本使用Play框架生成的RUNNING_PID文件,其中包含应用程序服务器进程的ID。
安全启动
启动应用程序后,脚本将检查是否已创建RUNNING_PID文件以及该进程是否真正在运行。 之后,它使用wget实用程序对根文档发出HTTP GET请求,以再次检查服务器是否处于活动状态。 当然,这假定您的应用程序提供了此文档。 如果您不喜欢(或没有)wget,那么我也提供了curl版本以方便您。
安全停车
停止检查其ID在RUNNING_PID文件中的进程是否确实属于您的应用程序。 这是一项重要的检查,因此我们不会意外杀死一个无辜的进程。 然后,它从最温和的信号开始向过程发送终止信号,直到过程终止。
贡献
我感谢我的雇主Dominion Marine Media,让我与您分享这一喜悦。 随时贡献。
翻译自: https://www.javacodegeeks.com/2014/03/init-d-shell-script-for-play-framework-distributed-applications.html
play 框架