#背景

之前做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守护进程启动和关闭脚本相关推荐

  1. java jvm bind解决_java web项目启动的时候JVM_Bind,真的是tomcat端口被占用了吗?tomcat不同意...

    java web项目启动的时候JVM_Bind,真的是tomcat端口被占用了吗?tomcat不同意了 凯哥Java 凯哥java 记录帮朋友解决JVM_Bind错误. java web项目启动的时候 ...

  2. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  3. java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程

    synchronized(someObject){ //对象锁 } 一.对象锁 someObject 的使用说明: 1.对象锁的返还. 当synchronize()语句执行完成. 当synchroni ...

  4. Java的知识点25——程序、进程与线程 || 线程的创建和启动

    程序.进程与线程 进程的特点:动态性.并发性.独立性 并发和并行的区别 并发:多个CPU同时执行多个任务 并行:一个CPU(采用时间片)同时执行多个任务 注:很多多线程是模拟出来的,真正的多线程是指有 ...

  5. linux 使用systemctl 设置java进程开机启动,管理springboot开机进程

    该过程默认已经安装jdk.java程序启动方式有多重,列出如下几种. 1.java -jar demo.jar 使用该命令程序在控制台输出启动,当按下Ctrl+C和关闭终端时,程序会终止.输出日志,在 ...

  6. Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  7. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...

  8. Android 进阶——系统启动之Android进程造物者Zygote 进程启动详解(六)

    引言 前面系列文章介绍了Android系统的第一个用户进程--init进程由解析init.rc脚本启动,完成属性系统的初始化等工作后紧接着启动Android系统上的造物者--Zygote进程,这篇文章 ...

  9. java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

    <尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...

最新文章

  1. oracle solaris 内核 源码,Oracle和SUN Solaris内核参数
  2. H极大值—lhMorpHMax
  3. 《现代操作系统》第4章读书笔记--文件系统(未完成)
  4. 关于未达账项的账务处理
  5. 31-32 python mysql-connector创建数据、crud,where,排序,删除等。PyMSQL驱动,插入操作、查询操作、更新操作、删除操作、执行
  6. 【数据结构与算法】之判断是否互为字符重排
  7. 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
  8. 网关和路由器的区别是什么?
  9. 台电u盘量产工具_简单几步,让U盘起死回生
  10. python语言训练教程_PYTHON零基础快乐学习之旅(K12实战训练)
  11. python-time时间模块
  12. 动态规划入门之国王的金矿
  13. linux使用什么ide编译安卓,抛弃IDE,使用gradle命令与vim构建安卓应用
  14. -Xlint:deprecation
  15. [转载]一个本科生在世界五大顶尖咨询公司实习心得
  16. jdbc连接池的数量设置怎么才合适?
  17. Sqlserver添加或修改字段
  18. 微信小程序开发(十五)小程序使用scrollview实现滚动导航栏
  19. 视频教你从巨潮咨询网站批量下载上市公司公告pdf文件
  20. 论文学习笔记:PoseFix: Model-agnostic General Human Pose Refinement Network

热门文章

  1. Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问题
  2. 你有遇到过MySQL因大小写敏感导致的问题吗
  3. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
  4. linux作业控制三个,10个linux 作业控制的bash 脚本实例
  5. android 分辨率合集,Android编程之分辨率处理相关代码段合集
  6. nanodet onnx踩坑记录
  7. pytorch map低的增强训练
  8. RetinaFace 人脸关键点
  9. dlib android
  10. EfficientNet 测试