java启动 守护进程_java守护进程启动和关闭脚本
#背景
之前做gms performance 测试的时候,由于测试经常无缘无故中断,而且google工程师写的shell脚本并未输出任何日志信息,以至于只能在脚本里面打log进行追踪问题,而那时本人对shell脚本语言没有任何基础,看起来很困难,但是这种组织语言的自动化和控制的艺术很吸引我,也是在那之后,对shell脚本产生了浓厚的兴趣,抽点时间写了一个守护进程的微型脚本。
# 程序名称
PROJECT_NAME=route
#程序路径
APP_HOME=$(dirname $(pwd))/$PROJECT_NAME
#java库目录
JAVA_LIB_PATH=$APP_HOME/resource/daemon/lib
#JAVA_HOME
JAVA_HOME=/home/software/jdk1.8
#依赖路径,route.jar中使用mf文件指定依赖jar包,否则就需要指定所有jar包
CLASS_PATH=$APP_HOME/resource/daemon/route.jar
#CLASS_PATH=$CLASS_PATH:$JAVA_LIB_PATH/netty-all-4.1.17.Final.jar
#CLASS_PATH=$CLASS_PATH:$JAVA_LIB_PATH/disruptor-3.2.1.jar
#CLASS_PATH=$CLASS_PATH:$JAVA_LIB_PATH/log4j-api-2.0.2.jar
#CLASS_PATH=$CLASS_PATH:$JAVA_LIB_PATH/log4j-core-2.0.2.jar
#参数
JAVA_OPTS=-Xms512m -Xmx512m -Xnoclassgc -Xverify:none
#程序入口类
MAIN_CLASS=com.dice.game.StartupWrapper
#程序ID文件
PID_FILE=${APP_HOME}/${PROJECT_NAME}.pid
#日志输出路径
LOG_FILE=${APP_HOME}/logs/${PROJECT_NAME}.out
#判断文件是否存在,如果不存在则创建
if [ ! -f "$PID_FILE" ]; then
touch "$PID_FILE"
echo 0 > $PID_FILE
fi
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
#输出
echo "service name: $PROJECT_NAME"
echo "app home: $APP_HOME"
echo "java home: $JAVA_HOME"
echo "class path: $CLASS_PATH"
echo "main class: $MAIN_CLASS"
echo "pid file : $PID_FILE"
pid=0
#获得pid
getpid() {
pid=`cat $PID_FILE`
}
#启动项目
start() {
getpid
if [ $pid -ne 0 ]; then
echo "================================"
echo "warn: already started! or bad close last time!"
echo "================================"
fi
echo -n "Starting..."
nohup $JAVA_HOME/bin/java -server $JAVA_OPTS -classpath $CLASS_PATH $MAIN_CLASS >> $LOG_FILE 2>&1 & echo $! > $PID_FILE
getpid
if [ $pid -ne 0 ]; then
echo "================================="
echo "[Start Success] (pid=$pid)"
echo "================================"
else
echo "================================="
echo "[Start Failed]"
echo "================================="
fi
}
#关闭项目
#使用 kill -15 pid 方式来关闭进程,使得程序可以执行shutdownhook释放资源
stop() {
getpid
if [ $pid -ne 0 ]; then
skill -15 $pid
echo "================================"
echo "stoping"
echo "================================"
fi
}
##脚本入口
case "$1" in
'start')
start
;;
'stop')
stop
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
今日推荐 满江的一首《归来》 ------>归去来兮情满江
2018.10.11
java启动 守护进程_java守护进程启动和关闭脚本相关推荐
- java jvm bind解决_java web项目启动的时候JVM_Bind,真的是tomcat端口被占用了吗?tomcat不同意...
java web项目启动的时候JVM_Bind,真的是tomcat端口被占用了吗?tomcat不同意了 凯哥Java 凯哥java 记录帮朋友解决JVM_Bind错误. java web项目启动的时候 ...
- Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型
1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...
- java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程
synchronized(someObject){ //对象锁 } 一.对象锁 someObject 的使用说明: 1.对象锁的返还. 当synchronize()语句执行完成. 当synchroni ...
- Java的知识点25——程序、进程与线程 || 线程的创建和启动
程序.进程与线程 进程的特点:动态性.并发性.独立性 并发和并行的区别 并发:多个CPU同时执行多个任务 并行:一个CPU(采用时间片)同时执行多个任务 注:很多多线程是模拟出来的,真正的多线程是指有 ...
- linux 使用systemctl 设置java进程开机启动,管理springboot开机进程
该过程默认已经安装jdk.java程序启动方式有多重,列出如下几种. 1.java -jar demo.jar 使用该命令程序在控制台输出启动,当按下Ctrl+C和关闭终端时,程序会终止.输出日志,在 ...
- Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...
- Android 进阶——系统启动之Android进程造物者Zygote 进程启动详解(六)
引言 前面系列文章介绍了Android系统的第一个用户进程--init进程由解析init.rc脚本启动,完成属性系统的初始化等工作后紧接着启动Android系统上的造物者--Zygote进程,这篇文章 ...
- java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?
<尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...
最新文章
- oracle solaris 内核 源码,Oracle和SUN Solaris内核参数
- H极大值—lhMorpHMax
- 《现代操作系统》第4章读书笔记--文件系统(未完成)
- 关于未达账项的账务处理
- 31-32 python mysql-connector创建数据、crud,where,排序,删除等。PyMSQL驱动,插入操作、查询操作、更新操作、删除操作、执行
- 【数据结构与算法】之判断是否互为字符重排
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 网关和路由器的区别是什么?
- 台电u盘量产工具_简单几步,让U盘起死回生
- python语言训练教程_PYTHON零基础快乐学习之旅(K12实战训练)
- python-time时间模块
- 动态规划入门之国王的金矿
- linux使用什么ide编译安卓,抛弃IDE,使用gradle命令与vim构建安卓应用
- -Xlint:deprecation
- [转载]一个本科生在世界五大顶尖咨询公司实习心得
- jdbc连接池的数量设置怎么才合适?
- Sqlserver添加或修改字段
- 微信小程序开发(十五)小程序使用scrollview实现滚动导航栏
- 视频教你从巨潮咨询网站批量下载上市公司公告pdf文件
- 论文学习笔记:PoseFix: Model-agnostic General Human Pose Refinement Network
热门文章
- Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问题
- 你有遇到过MySQL因大小写敏感导致的问题吗
- Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
- linux作业控制三个,10个linux 作业控制的bash 脚本实例
- android 分辨率合集,Android编程之分辨率处理相关代码段合集
- nanodet onnx踩坑记录
- pytorch map低的增强训练
- RetinaFace 人脸关键点
- dlib android
- EfficientNet 测试