用于Play框架分布式应用程序的Init.d Shell脚本

我编写了一个Shell脚本来控制使用内置命令dist打包的Play框架应用程序。 以这种方式打包的应用程序是压缩的独立发行版,不需要在应该运行其的计算机上安装Play框架。 所需的一切都在包装内。 在zip的bin目录中,有一个可执行的Shell脚本,其名称与您的应用程序相同。 您可以通过运行此脚本来启动应用程序。 这就是全部,但我想要更多。

脚本设置

从GitHub下载脚本并使其可执行:

chmod +x ./dist-play-app-initd

在运行脚本之前,您必须设置NAMEPORTAPP_DIR变量的值。

  1. NAME –应用程序的名称,必须与Play框架生成的外壳脚本的名称相同才能运行该应用程序
  2. PORT –应用程序应运行的端口号
  3. 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

启动,停止,重新启动并检查状态

现在,我可以方便地将我的Pl​​ay应用程序作为守护程序运行。 让我们运行它。

开始

要启动我的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,让我与您分享这种喜悦。 随时贡献。

参考: Rado Buransky博客博客上的JCG合作伙伴 Rado Buransky的Play框架分布式应用程序的Init.d Shell脚本 。

翻译自: https://www.javacodegeeks.com/2014/03/init-d-shell-script-for-play-framework-distributed-applications.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Java中使用内存映射文件时检测(写入)失败

内存映射文件是一个很好的并且经常被忽视的工具。 我不会在这里详细介绍它们的工作方式(使用 力 Google Luke!),但我将快速总结其优势: 操作系统提供的延迟加载和写入缓存(您不必自己编写,并…

在jsp文件中通过超链接访问servlet_Eclipse中创建Servlet

1.新建test1.jsp文件,输入如下代码代码解释:一个超链接,跳转到forwardServlet注意forwardServlet 这里是个Servlet2.在工程中新建Servlet3.输入Class名称,注意下边的Supper Class 它自动继承了HttpServlet选择next4.Create Servle…

C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用...

1、简介 虽然ThreadPool、Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常、或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它,而不是让它继续执行,消耗资源.让CPU不在把时间和资源花在没有意义的代码上. 2、主线…

HTML邮件制作规范

以下内容有些是别人总结的,有些是自己在工作中总结的。 模板最佳尺寸:显示宽度550px-750px,模板高度控制在一屏以内。 1、 用table css方式构建模板 Div css布局不完全被邮件客户端支持,所以无法使用div css布局。 2、 可以使用…

Oracle学习:新建表空间

1. 以 sysdba 身份登入Oracle sqlplus / as sysdba; 2. 创建表空间 create tablespace (空间名)fwptfs (数据文件存放路径)datafile D:\xxx (初始大小)size 500m (自动扩容,每次200m)autoextend on next 200m; 3. 创建用户 create user (用户名)fwptfs…

在Jersey 2中进行集成测试自定义验证约束

我最近加入了一个团队,试图将一个单一的遗留系统转换为Java中的RESTful服务集。 他们决定使用最新的2.x版本的Jersey作为REST容器,这对我来说不是首选,因为我不是JSR- *规范的忠实拥护者。 但是现在我必须承认,JAX-RS 2.x的运行正…

mysql什么实务_MysQL是什么类型的据库?

【单选题】【听力题】Listen to the interview with Ajay, someone from India. Are the following statements true or false? (6.0分)【听力题】Listen to the talk about the changing of the guard ceremony in London. Then fill in the details in the process. (8.0分)…

tomcat7使用dbcp连接池遇到的坑

项目部署在tomcat后每隔一段时间便会报错 Cause: java.sql.SQLException: Could not retrieve transation read-only status server ; SQL []; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transa…

纯CSS实现3D照片墙

HTML部分&#xff1a; <body><div class"photo-wrap"> <!-- 舞台 --><div class"container"> <!-- 容器 --><div class"img">我是中心</div><div class"img img01"><img src&q…

Neo4j Backup:在Mark Needham上存储副本和一致性检查

我上周写的有关 Neo4j在线备份工具的鲜为人知的事情之一是&#xff0c;从概念上讲&#xff0c;它包含两个部分&#xff1a; 将商店文件复制到您选择的位置 验证这些存储文件是否一致。 默认情况下&#xff0c;这两个命令都在您运行“ neo4j-backup”脚本时运行&#xff0c;但…

Guava之RangeMap

在Guava官方API上面可以得知&#xff1a;RangeMap是一种集合类型( collection type)&#xff0c;它将不相交、且不为空的Range&#xff08;key&#xff09;映射给一个值&#xff08;Value&#xff09;。和RangeSet不一样&#xff0c;RangeMap不可以将相邻的区间合并&#xff0c…

sqoop遇到mysql字段为保留字_关于在sqoop 导出数据到mysql数据库的过程对于空字符的处理。...

今天在做sqoop的导入和导出的操作。在导出数据到mysql数据库的时候一直有问题&#xff0c;在导入空字段的时候就出现下面这个错误。WARN hdfs.DFSClient: Caught exceptionjava.lang.InterruptedExceptionat java.lang.Object.wait(Native Method)at java.lang.Thread.join(Thr…

CSS3新增的伪类选择器

伪类选择器的作用&#xff1a;对已有选择器做进一步的限制&#xff0c;对已有选择器能匹配的元素做进一步的过滤。CSS 3提供的伪类选择器主要分为以下三类&#xff1a; 结构性伪类选择器UI元素状态伪类选择器其他伪类选择器 1、结构性伪类选择器 Selector:root&#xff1a;匹…

签名SOAP消息–生成封装的XML签名

数字签名是使数字内容真实可信的一种广泛使用的机制。 通过为某些内容生成数字签名&#xff0c;我们可以让另一方能够验证该内容。 通过此验证&#xff0c;它可以保证在我们签名后不会更改。 通过这个示例&#xff0c;我将分享如何为SOAP信封生成签名。 但是&#xff0c;这当然…

2019 The 19th Zhejiang University Programming Contest

感想&#xff1a; 今天三个人的状态比昨天计院校赛的状态要好很多&#xff0c;然而三个人都慢热体质导致签到题wa了很多发。最后虽然跟大家题数一样(6题)&#xff0c;然而输在罚时。 只能说&#xff0c;水题还是刷得少&#xff0c;看到签到都没灵感实在不应该。 题目链接&#…

openvas安装和基本使用

OpenVAS是开放式漏洞评估系统&#xff0c;也可以说它是一个包含着相关工具的网络扫描器。OpenVAS是开放式漏洞评估系统&#xff0c;也可以说它是一个包含着相关工具的网络扫描器。其核心部件是一个服务器&#xff0c;包括一套网络漏洞测试程序&#xff0c;可以检测远程系统和应…

修改mysql编码方式centos_CentOS下修改mysql数据库编码为UTF-8(附mysql开启远程链接和开放3306端口)...

楼主在配置好linux云服务器的jdk,tomcat,mysql后&#xff0c;当要开始部署项目是&#xff0c;忽然意识到一个很严重的问题&#xff0c;那就是数据库的编码问题&#xff0c;自安装完成后并未修改数据库的额编码。。。。下面就来讲说linux下修改mysql的编码问题吧。。有一个问题网…

Java 8 Lambda表达式的函数式编程– Monads

什么是monad &#xff1f;&#xff1a; monad是一种设计模式概念&#xff0c;用于大多数功能编程语言&#xff08;如Lisp&#xff09;或现代世界的Clojure或Scala中。 &#xff08;实际上&#xff0c;我会从scala复制一些内容。&#xff09;现在&#xff0c;为什么它在Java中变…

srtvlet filter

Filter&#xff0c;过滤器&#xff0c;顾名思义&#xff0c;即是对数据等的过滤&#xff0c;预处理过程。为什么要引入过滤器呢&#xff1f;在平常访问网站的时候&#xff0c;有时候发一些敏感的信息&#xff0c;发出后显示时 就会将敏感信息用*等字符替代&#xff0c;这就是用…

mysql怎么合并行_mysql怎么合并行

mysql合并行的方法&#xff1a;使用函数【GROUP_CONCAT()】&#xff0c;代码为【SELECT am.activeId,GROUP_CONCAT(m.modelName SEPARATOR ‘,’) modelName】。【相关学习推荐&#xff1a;mysql学习】mysql合并行的方法&#xff1a;一个字段可能对应多条数据&#xff0c;用mys…