search
HomeJavajavaTutorialHow to call java main method in linux shell script?

How to call java main method in linux shell script?

linux shell脚本如何调用java main方法?

linux shell脚本调用java main方法解决方法:

#!/bin/sh  
    #  
    #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,  
    #也可以作为启动java程序的独立脚本来使用。  
    #  
    #Author: tudaxia.com, Date: 2011/6/7  
    #  
    #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。  
    #在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,  
    #可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,  
    #增加在执行kill命令前的一系列检查。  
    #   
    ###################################  
    # 以下这些注释设置可以被chkconfig命令读取   
    # chkconfig: - 99 50   
    # description: Java程序启动脚本   
    # processname: test   
    # config: 如果需要的话,可以配置   
    ###################################   
    #  
    ###################################  
    #环境变量及程序执行参数  
    #需要根据实际环境以及Java程序名称来修改这些参数  
    ###################################  
    #JDK所在路径  
    JAVA_HOME="/usr/java/jdk1.8.0_102"
    #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号  
    #RUNNING_USER=portal  
    #Java程序所在的目录(classes的上一级目录)  
    APP_HOME=/opt/tmp/geecuser/geec_calculate    #需要启动的Java主程序(main方法类)  
    APP_MAINCLASS=com.ai.core.start.Main  
    #拼凑完整的classpath参数,包括指定lib目录下所有的jar  
    CLASSPATH=$APP_HOME/classes  
    for i in "$APP_HOME"/lib/*.jar; do  
       CLASSPATH="$CLASSPATH":"$i"  
    done      
    #java虚拟机启动参数  
    JAVA_OPTS="-ms1024m -mx1024m -Xmn512m -Djava.awt.headless=true -XX:MaxPermSize=256m"  
      
    ###################################  
    #(函数)判断程序是否已启动  
    #  
    #说明:  
    #使用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 >$APP_HOME/log/nohup 2>&1 &"  
          eval $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) "  
          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  
    esac  
    exit 0

推荐教程:《JAVA视频教程

The above is the detailed content of How to call java main method in linux shell script?. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log?How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log?Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

How to elegantly obtain entity class variable names to build database query conditions?How to elegantly obtain entity class variable names to build database query conditions?Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list?How to use the Redis cache solution to efficiently realize the requirements of product ranking list?Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

How to safely convert Java objects to arrays?How to safely convert Java objects to arrays?Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

How do I convert names to numbers to implement sorting and maintain consistency in groups?How do I convert names to numbers to implement sorting and maintain consistency in groups?Apr 19, 2025 pm 11:30 PM

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products?E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products?Apr 19, 2025 pm 11:27 PM

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

How to set the default run configuration list of SpringBoot projects in Idea for team members to share?How to set the default run configuration list of SpringBoot projects in Idea for team members to share?Apr 19, 2025 pm 11:24 PM

How to set the SpringBoot project default run configuration list in Idea using IntelliJ...

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software