精华内容
下载资源
问答
  • linux shell 脚本启动Java总结

    千次阅读 2017-04-12 21:47:43
    linux shell 使用总结Linux shell对于我们去傻瓜式的去操作一系列的命令非常的方便,比如启动java程序启动tomact也是通过操作shell来处理的。比如下面操作启动Tomact 由于用户不懂配置处理JDK这些都是需要我们来...

    linux shell 使用总结

    Linux shell对于我们去傻瓜式的去操作一系列的命令非常的方便,比如启动java程序,启动tomact也是通过操作shell来处理的。比如下面操作启动Tomact
    由于用户不懂配置处理JDK这些都是需要我们来处理的哦!所以,这样更加的方便用户去操作和使用,同时对于技术支持工程师也是比较的便利。
    xxx.sh

    export CATALINA_HOME=$(cd `dirname $0`;pwd)
    export JAVA_HOME=$(cd `dirname $0`;pwd)/jdk-linux
    export JRE_HOME=$(cd `dirname $0`;pwd)/jdk-linux/jre
    export JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256M"
    exec bin/startup.sh 

    权限要给足够,递归的将124 用户 用户 组其 他人的权限都通通给予

    chmod -R 777 *

    shell中常用的特殊的字段

    1. $1~$9命令行中的输入参数
    2. $0脚本文件的名称
    3. $* 或者 $@命令行中的所有参数,有区别的。
    4. $$当前的shell脚本进程的Id号码
    5. $? 上一个命令或者函数的返回值
    6. $!最近一次启动后台的进程的ID
      如下就是使用最近一次的后台启动的ID重定向到一个文件中去
      不过这里没有考虑是否已经启动的问题。
    SERVER=/home/java/server  
    cd $SERVER    
    case "$1" in    
      start)  
        nohup java -Xmx128m -jar XXX.jar > $SERVER/server.log 2>&1 &  
        echo $! > $SERVER/server.pid  
        ;;    
      stop)  
        kill `cat $SERVER/server.pid`  
        rm -rf $SERVER/server.pid  
        ;;   
      restart)  
        $0 stop  
        sleep 1  
        $0 start  
        ;;    
      *)  
        echo "Usage: run.sh {start|stop|restart}"  
        ;;    
    esac    
    exit 0  

    shell简单的语法

    1. 定义变量直接写变量的名称value=xxx就行了
    2. 使用变量$value
    3. 使用双引号可以引用除了‘$’、‘`’(这个是反引号~那个键这个不加shfit,不同于引号)、‘\’外的任意的字符串,意思就是要解释这个变量代表的意义。
    4. ‘’’单引号就不允许有变量的替换,而不对它做shell解释。这个和反引号不一样,作者被坑了好久。

    命令替换(将字符串的执行结果输出来)

    比如定义了一个变量 cmd=”ls -l” 使用两种方式可以执行
    1. 使用反引号

    echo `$cmd`
    value1=`echo $cmd`
    
    1. 使用$()命令替换,将输出结果给予一个变量或者其他的
    value1=$($cmd)

    这种反单引号可以解析里面的shell的哦,我之前用的单引号,被坑了很久才发现。

    控制结构中的比较test[expression]

    可以通过man test查询很多的比较信息,if~else之内的使用很多的额
    1. 字符串不为空 -n String
    2. 两个字符串比较 String1=String2 相等结果为真 !=
    3. 两个表达式算数比较 expression1 -eq expression2 相等结果为真
    4. -ne 不相等,-gt大于为真,ge大于等于,lt小于,le小于等于,!expression
    5. -d file 这是一个文件为真…..
    6. for variable in argument-list
    do
    做事情
    done
    7. 函数,直接书写函数名称就是调用啦
    funcionname(){
    }

    后台运行nohup command >/dev/null 2>&1 &

    • 参考网址后台运行
    • 标准输出重定向到 /dev/null (a dummy device that does not record any output)
    • 2>&1 标准出错重定向到标准输出,也到/dev/null

    JPS -l (JDK提供的查看运行Java程序的进程号)

    • 利用这个命令我们可以查看当前的程序是否运行,或者找到程序杀死进程。
    • 参考JPS -l 使用网址
    • -l 输出应用程序main class的完整package名 或者 应用程序的jar文件名

    su -

    输入密码之后,后面的都使用管理员的权限去运行程序。

    字符编码问题

    • 由于使用xshell编写bash,在windows上面的编码不正确,导致linux执行错误
    • 怎么查看编码vi xxx.file 命令模式下
    • :set ff? 可以查看当前的是doc还是unix编码
    • set ff=unit处理为unix编码

    awk是一个强大的文本分析工具

    相对于grep的查找awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
    root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
    root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
    dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
    root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)
    如果只是显示最近登录的5个帐号,$1 返回的数据的第一个
    last -n 5 | awk  '{print $1}'
    root
    root
    root
    dmtsai
    root

    启动一个JAR

    1. 首先判断是否有当前的进程
    2. 启动当前进程
      这里就是“反向单引号使用成了单引号”,shell不解析执行,所以使用了第一个这种方式来展现我们的进程号和JAR的名称。
    3. 或者使用javaps=$JAVA_HOME/bin/jps -l |grep $MAIN_JAR_NAME
      • 检测进程是否存在
    #或者 javaps=`$JAVA_HOME/bin/jps -l |grep $MAIN_JAR_NAME`
    psid=0
    checkpid() {   
       javaps=$(eval "$JAVA_HOME/bin/jps -l |grep $MAIN_JAR_NAME")
       if [ -n "$javaps" ]; then
          psid=`echo $javaps | awk '{print $1}'`
       else
          psid=0
       fi
    }
    • 启动进程
    start() {
       #检测是否已经启动
       checkpid 
       #不等于0当前已经启动了
       if [ $psid -ne 0 ]; then
          echo "================================"
          echo "warn:  already started! (pid=$psid)"
          echo "================================"
       else
          echo -n "Starting  ..."
          nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar $MAIN_JAR_NAME >/dev/null 2>&1 &     
          checkpid
          if [ $psid -ne 0 ]; then
             echo "(pid=$psid) [OK]"
          else     
             echo "[Failed]"
          fi
       fi
    }

    可执行JAR

    • Linux下使用java -jar运行可执行jar包的正确方式 网址
    • java命令执行jar包的方式 考虑的问题网址
      首先你需要知道Jar包分为可执行Jar和非可执行Jar,一个可执行的Jar文件是一个自包含的Java应用程序,它存储在特别配置的JAR文件中,可以由JVM直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的JAR中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的JAR文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行JAR有助于方便发布和执行Java应用程序。

    • 对于可执行Jar,在运行java -jar选项的时候,那么环境变量CLASSPATH和在命令行中指定的所有类路径都将被JVM忽略,也就是说,对于一个可执行Jar,使用java -classpath或者java -cp或者set classpath=lib/commons-io-2.4.jar等等命令指定CLASSPATH都是无效的。

    对于一个可执行的JAR必须通过MANIFEST.MF文件的头引用它所需要的所有其他从属JAR,引用方式如下

    Manifest-Version: 1.0
    Built-By: fuqunqing
    Build-Jdk: 1.7.0_65
    Class-Path: lib/asm-2.2.3.jar lib/spring-core-3.0.6.RELEASE.jar lib/sp
     ring-asm-3.0.6.RELEASE.jar lib/spring-beans-3.0.6.RELEASE.jar lib/spr
     ing-aop-3.0.6.RELEASE.jar lib/aopalliance-1.0.jar 
    Created-By: Apache Maven 3.0.5 
    Main-Class: com.XXX.MainClass
    Archiver-Version: Plexus Archiver
    • Main-Class是jar文件的主类,程序的入口
    • Class-Path指定需要的jar,多个jar必须要在一行上,多个jar之间以空格隔开,如果引用的jar在当前目录的子目录下,windows下使用\来分割,linux下用/分割文件的冒号后面必须要空一个空格,否则会出错文件的最后一行必须是一个回车换行符,否则也会出错.所以最好在自己的平台打包。

    一个完整的标准的启动脚本

    #!/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
    展开全文
  • linux nohup命令启动程序,关闭shell,程序依然会关闭 解决办法 执行完nohup命令之后,使用exit命令退出shell登录 > nohup ./aaa & > exit

    linux nohup命令启动程序,关闭shell,程序依然会关闭

    解决办法
    执行完nohup命令之后,使用exit命令退出shell登录

    > nohup ./aaa &
    > exit
    
    展开全文
  • linuxshell脚本启动其他可执行程序

    千次阅读 2019-12-03 20:55:08
    一、C++测试程序如下: #include <QCoreApplication> #include <iostream> using namespace std; int main(int argc, char **argv) { cout << "--------------entry main-------------...

    linux下shell脚本启动其他可执行程序

    零、前言

    linux下的项目中经常需要使用shell脚本去启动其他程序的操作,下面是自己编写的测试程序,以方便不会的同学参考和学习。测试代码使用C++结合shell编写,其他语言类似。

    一、C++代码

    C++测试程序如下:

    #include <QCoreApplication>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        cout << "--------------entry main--------------" << endl;
        QCoreApplication a(argc, argv);
        for(int i=0; i<argc; i++)
        {
            cout << argv[i] << " " << endl;
        }
        cout << "----------------end---------------" << endl;
        return a.exec();
    }
    

    二、shell脚本

    shell脚本如下:

    #!/bin/bash
    
    echo "---------start shell-----" 
    echo "parameter1: $1"
    echo "parameter2: $2"
    echo "parameter3: $3"
    echo "parameter4: $4"
    echo "parameter5: $5"
    echo "parameter6: $6"
    
    ./testShell $1 $2 $3 $4 $5 $6
    

    三、shell运行效果

    执行shell运行效果如下:
    在这里插入图片描述

    展开全文
  • Linux启动shell脚本命令

    2020-07-23 09:15:40
    Linux启动shell脚本命令 1启动 service 脚本名 start 2停止 service 脚本名 stop 3重启 service 脚本名 restart

    Linux启动shell脚本命令

    1启动
    service 脚本名 start
    2停止
    service 脚本名 stop
    3重启
    service 脚本名 restart

    展开全文
  • 注意:window编辑的shell文件,通过ftp上传的Linux服务器,需要改变文件的格式(查看文件格式,vim编辑后输入 :set ff) 可以在linux里新建shell文件 避免这个问题 #!/bin/bash export JAVA_HOME=/root/tools/...
  • shell 脚本启动程序

    千次阅读 2019-02-10 21:51:11
    #! /bin/bash server_name="hello" server_path=/home/songchao/dnschool/05shell/hel...
  • linux中已经配置好jdk 检查是否配置好jdk java -version 创建.sh脚本 在自定义目录下创建 .sh 脚本,由于这个脚本只是操作指定jar包,个人建议脚本名称与jar包名称一致,方便区分,如下创建item.jar #替换这里jar...
  • linuxshell脚本启动java程序jar包

    千次阅读 2015-12-21 10:27:37
    SERVER=/home/lytz/zhengzy/myapp_email cd $SERVERstart(){ echo “start project…” JAVA_HOME=/usr/java/jdk1.7.0_79 export JAVA_HOME PATH=JAVAHOME/bin:.:JAVA_HOME/bin:.:PATH ...
  • nohup java -Xms256m -Xmx2048m -Dfile.encoding=utf-8 -jar demo.jar &...将这条命令写到shell脚本中去 注意事项: 1.需要注意shell脚本的规范#!/bin/bash 2.需要注意保存退出后,赋予脚本执行权限...
  • 启动后,命令框可以看到启动控制台信息,关闭命令框则程序也关闭。 2、java和javaw的区别 java命令运行的程序会有控制台输出信息,javaw不会出现控制台窗口,也不会输出任何信息。 3、编写启动和停止脚本 在jar...
  • shell 脚本启动jar程序

    万次阅读 2016-05-12 22:11:59
    Linux启动jar包程序,直接上步骤: 1、首先,maven项目打成一个jar包,同时使用dependency:copy-dependencies命令导出依赖的jar包,把导出的包和项目jar包都放进lib文件夹里 2、编写shell脚本: #!/bin/bash ...
  • Linux 下使用Shell脚本启动Java应用

    万次阅读 2018-05-06 19:04:59
    最近项目有需要的关系,就抽出点时间研究了一下 Linux 下使用脚本启动Java应用的方式。很简单,大家作为参考。 这个脚本是在网上找到一个挺好的通用 shell 脚本。只需要修改一些配置变量,就可以用来做起动脚本了...
  • 主要介绍了Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Linux操作系统使用nohup命令启动sh shell 脚本程序无限循环启动,只要是 让程序在后台启动 都会无限循环启动(程序本来应该启动完毕的,但是从日志上看程序又再次启动了一遍,无限循环,而且程序也无法正常访问...
  • 后台运行的原因 在 windows 上,在 cmd 命令窗口...windows 通过 bat 脚本后台启动 jar 包,通过 jps 找到 pid,然后停止指定 jar 包,附 linux shell 脚本启停脚本 参考 springboot 程序,lib 下是依赖 jar windo...
  • linux下运行C程序启动shell命令

    千次阅读 2018-03-17 11:46:37
    Step1:在linux的/Desktop执行命令 touch test.c 生成c文件,接着执行命令 gedit test.c 输入下面程序:#include &lt;stdio.h&gt; void main(){ system("./mk.sh");Step2:执行命令 gcc -o ...
  • 主要介绍了Linuxshell通用脚本启动jar(微服务)的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 背景知识:Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个...其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种: public Process exec(Stri
  • Linux系统-shell脚本运行程序

    万次阅读 2017-07-28 19:03:15
    linuxshell程序运行
  • linux shell java lib(linux shell脚本加载java环境变量)
  • Linux中编写Shell脚本

    万次阅读 多人点赞 2018-10-08 11:22:35
    Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[]符号的运算示例 Shell脚本的条件测试 几种...
  • 过程描述 刚不久用 Tornado 写了一个项目,本打算部署在 Nginx ...但是,当我关闭远程 ssh 连接后,程序就出问题了,程序没有任何反应,但是进程却好好的待在进程池中等待 CPU 的召唤。通过 try 捕获到了异常 [Err...
  • shell启动jar程序脚本,可以根据传入的参数"start"、"stop"、"restart"启动当前目录下的jar程序
  • linux shell 命令

    千次阅读 2014-05-19 19:28:48
    linux shell 命令 ...Shell 脚本语言加上linux 命令语句就构成了shell程序。优点在于批量处理、不用用户每次手动输入。 bash是shell程序解释器的一种。   常用命令 pwd:print working directory,打印工

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,710
精华内容 72,284
热门标签
关键字:

linuxshell脚本启动程序

linux 订阅