linux java启动脚本文件_不错的linux下通用的java程序启动脚本

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!/bin/sh

#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,

#也可以作为启动java程序的独立脚本来使用。

#

#Author: tudaxia.com, Date: 2011/6/7

#

#警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。

#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,

#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,

#增加在执行kill命令前的一系列检查。

#

#

###################################

#环境变量及程序执行参数

#需要根据实际环境以及Java程序名称来修改这些参数

###################################

#JDK所在路径

JAVA_HOME="/usr/java/jdk"

#执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号

RUNNING_USER=root

#Java程序所在的目录(classes的上一级目录)

APP_HOME=/opt/tudaxia/test/WEB-INF

#需要启动的Java主程序(main方法类)

APP_MAINCLASS=com.tudaxia.test.TestMain

#拼凑完整的classpath参数,包括指定lib目录下所有的jar

CLASSPATH=$APP_HOME/classes

for i in "$APP_HOME"/lib/*.jar; do

CLASSPATH="$CLASSPATH":"$i"

done

#java虚拟机启动参数

JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"

###################################

#(函数)判断程序是否已启动

#

#说明:

#使用JDK自带的JPS命令及grep命令组合,准确查找pid

#jps 加 l 参数,表示显示java的完整包路径

#使用awk,分割出pid ($1部分),及Java程序名称($2部分)

###################################

#初始化psid变量(全局)

psid=0

checkpid() {

javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`

if [ -n "$javaps" ]; then

psid=`echo $javaps | awk '{print $1}'`

else

psid=0

fi

}

###################################

#(函数)启动程序

#

#说明:

#1. 首先调用checkpid函数,刷新$psid全局变量

#2. 如果程序已经启动($psid不等于0),则提示程序已启动

#3. 如果程序没有被启动,则执行启动命令行

#4. 启动命令执行后,再次调用checkpid函数

#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]

#注意:echo -n 表示打印字符后,不换行

#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法

###################################

start() {

checkpid

if [ $psid -ne 0 ]; then

echo "================================"

echo "warn: $APP_MAINCLASS already started! (pid=$psid)"

echo "================================"

else

echo -n "Starting $APP_MAINCLASS ..."

JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"

su - $RUNNING_USER -c "$JAVA_CMD"

checkpid

if [ $psid -ne 0 ]; then

echo "(pid=$psid) [OK]"

else

echo "[Failed]"

fi

fi

}

###################################

#(函数)停止程序

#

#说明:

#1. 首先调用checkpid函数,刷新$psid全局变量

#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行

#3. 使用kill -9 pid命令进行强制杀死进程

#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?

#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]

#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。

#注意:echo -n 表示打印字符后,不换行

#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值

###################################

stop() {

checkpid

if [ $psid -ne 0 ]; then

echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "

su - $RUNNING_USER -c "kill -9 $psid"

if [ $? -eq 0 ]; then

echo "[OK]"

else

echo "[Failed]"

fi

checkpid

if [ $psid -ne 0 ]; then

stop

fi

else

echo "================================"

echo "warn: $APP_MAINCLASS is not running"

echo "================================"

fi

}

###################################

#(函数)检查程序运行状态

#

#说明:

#1. 首先调用checkpid函数,刷新$psid全局变量

#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid

#3. 否则,提示程序未运行

###################################

status() {

checkpid

if [ $psid -ne 0 ]; then

echo "$APP_MAINCLASS is running! (pid=$psid)"

else

echo "$APP_MAINCLASS is not running"

fi

}

###################################

#(函数)打印系统环境参数

###################################

info() {

echo "System Information:"

echo "****************************"

echo `head -n 1 /etc/issue`

echo `uname -a`

echo

echo "JAVA_HOME=$JAVA_HOME"

echo `$JAVA_HOME/bin/java -version`

echo

echo "APP_HOME=$APP_HOME"

echo "APP_MAINCLASS=$APP_MAINCLASS"

echo "****************************"

}

###################################

#读取脚本的第一个参数($1),进行判断

#参数取值范围:{start|stop|restart|status|info}

#如参数不在指定范围之内,则打印帮助信息

###################################

case "$1" in

'start')

start

;;

'stop')

stop

;;

'restart')

stop

start

;;

'status')

status

;;

'info')

info

;;

*)

echo "Usage: $0 {start|stop|restart|status|info}"

exit 1

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

相关文章

linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞

发布日期:2014-04-10CVE ID:CVE-2014-0160受影响的软件及系统:OpenSSL 1.0.1-OpenSSL 1.0.1fOpenSSL 1.0.2-betaOpenSSL 1.0.2-beta1未受影响的软件及系统:OpenSSL 0.9.8OpenSSL 1.0.0OpenSSL 1.0.1gOpenSSL 1.0.2-bet…

mysql数据库主要负责存储_mysql数据库自带数据库介绍

show databases;查看mysql自带数据库有information_schema,mysql, performance_schema, testinformation_schema数据库有40张表,如下。在MySQL中,把 information_schema 看作是一个数据库,确切说…

python 编辑数学公式_Jupyter快速编辑高大上数学公式 泰勒展开式

欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。人工智能的基础是机器学习,而通过之前的几篇博客了解到,机器学习的基础是数学…

用java写一个日历_使用JAVA写一个简单的日历

JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/*** 制作一个简单的日历** author 这…

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)

<span style"font-family: Microsoft YaHei; font-size: 14px;">MySQL定时任务event</span> 由于一些业务需求&#xff0c;我们可能需要定时清除数据库一些废弃的数据&#xff0c;可以使用mysql的存储过程和事件来完成。 下面例子定时清除日志表tbl_base…

python慢为什么用的人还很多_为什么是所有人比python标准慢得多吗?

通过使用生成器理解而不是列表理解&#xff0c;可以使这两个函数更快、更具可比性。在s """import numpy as np;x, y np.random.rand(1000),np.random.rand(1000);(all((x[i], y[i])) for i in range(1000)) """timeit.timeit(s,number1000)0.…

Java规定构造方法和类名相同_不是说:java构造方法和类名一定要相同吗?为什么我看见很多构造方法跟类名不完全一致啊?隐藏了什么吗?...

比如以下代码。类名不是TestCar_EX才对吗&#xff1f;为什么构造方法名却是Car&#xff1f;我看见很多教程都是这么写的。晕。。。。。。。。。。。到底怎么样才是对的啊&#xff1f;public class TestCar_EX {public static void main(String[] args) {Car c1 new Car("…

java pdf stamper_PDFStamper在几个PDF文件上失败(itext 5.5.1)

我尝试使用数据填充PDF表单并获得PDFStamper(itext版本5.5.1)以处理多个PDF文件&#xff0c;但在某些情况下它总是失败。示例代码&#xff1a;PdfReader reader new PdfReader(new FileInputStream("C:/Temp/source.pdf"));PdfStamper stamper new PdfStamper(read…

用猎物皮毛换酒喝java_荒野大镖客2三星毛皮狩猎技巧分享 各种类猎物三星皮毛获取方法...

荒野大镖客2三星毛皮怎么获得&#xff1f;想必很多朋友都还不是很清楚吧&#xff0c;所以呢小编今天给大家带来的就是荒野大镖客2三星毛皮狩猎技巧分享&#xff0c;需要的朋友还不快进来看看&#xff1f;三星毛皮狩猎技巧分享猎物体型分水岭建议以狐狸类为例。(1)中型猎物[比狐…

Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

近来由于项目需要&#xff0c;需要用到手机短信验证码的功能&#xff0c;其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口&#xff0c;下面我把我在项目中用到的记录一下&#xff0c;以便给大家提供个思路&#xff0c;由于本人的文采有限&#xff0c;还请大…

java中的udp丢包_UDP丢包问题

wxbcrefut&#xff1a;谢谢楼主分享&#xff0c;最近也遇到这种问题&#xff0c;我在虚机里测试(配置为8核16G内存)&#xff0c;1s接受2W条数据丢包就特别严重&#xff0c;我还没有处理只是接受而已&#xff0c;不知道问题出在哪&#xff0c;求指教我是用java写的&#xff0c;代…

java人体识别_用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍...

items results.getAnalyseList();// 开发者根据需要处理识别结果&#xff0c;例如&#xff0c;在此方法中进行相似度计算&#xff0c;从而在检测到特定姿势后进行拍照等操作。// 需要注意&#xff0c;这里只对检测结果进行处理&#xff0c;不可调用ML Kit提供的其他检测相关接…

java中select的用法_mybaties中select用法,以及常用增删改查

查询语句是使用 MyBatis 时最常用的元素之一select元素配置细节如下属性描述取值默认id在这个模式下唯一的标识符&#xff0c;可被其它语句引用parameterType传给此语句的参数的完整类名或别名resultType语句返回值类型的整类名或别名。注意&#xff0c;如果是集合&#xff0c;…

jpa java.util.map_使用JPA存储Map String,String

JPA 2.0通过ElementCollection注释可以支持原语集合&#xff0c;您可以将其与java.util.Map集合支持一起使用。这样的事情应该起作用&#xff1a;Entitypublic class Example {Id long id;// ....ElementCollectionMapKeyColumn(name"name")Column(name"value&q…

Js获取短信验证码前段效果

一&#xff1a;先上效果图&#xff1a; 二&#xff1a;源代码文件&#xff1a;reg.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http:…

java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

Java 基础语法一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的…

java创建一副牌_用java怎么创建一副扑克牌

一张扑克牌有两个属性&#xff0c;一个是花色(suit)&#xff0c;一个是点数(rank)&#xff0c;下面写一个简单的类Cardpackage com.syz.card;import java.io.Serializable;public class Card implements Serializable{private static final long serialVersionUID -4279016186…

java使用三种循环打印99表_编程题:利用for循环打印 9*9 表

#利用for循环打印 9*9 表?1*111*22 2*241*33 2*36 3*391*44 2*48 3*412 4*4161*55 2*510 3*515 4*520 5*5251*66 2*612 3*618 4*624 5*630 6*6361*77 2*714 3*721 4*728 5*735 6*742 7*7491*88 2*816 3*824 4*832 5*840 6*848 7*856 8*8641*99 2*918 3*927 4*936 5*945 6*954 …

php转化xml数组_PHP实现数组array转换成xml的方法

本文实例讲述了PHP实现数组array转换成xml的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;$elementLevel 0 ;function array_Xml($array, $keys ){global $elementLevel;if(!is_array($array)){if($keys ){return $array;}else{return "\n" . $arr…

Java得到请求的IP地址

/*** 得到请求的IP地址* * param request* return*/public static String getIp(HttpServletRequest request) {String ip request.getHeader("X-Real-IP");if (StringUtils.isBlank(ip)) {ip request.getHeader("Host");}if (StringUtils.isBlank(ip)) …