精华内容
下载资源
问答
  • linux系统应用启动、重启、停止shell脚本 **Linux项目部署经常需要手动查找进程,然后kill,再启动,此过程较繁琐,可以编写脚本实现一键重启,启动,停止 启动命令:sh nginx_server.sh start 重启命令:sh ...

    linux系统应用启动、重启、停止shell脚本


    **Linux项目部署经常需要手动查找进程,然后kill,再启动,此过程较繁琐,可以编写脚本实现一键重启,启动,停止

    启动命令:sh nginx_server.sh start

    重启命令:sh nginx_server.sh restart

    停止命令:sh nginx_server.sh stop

    脚本如下:文件名nginx_server.sh

    #!/bin/bash
    #需要启动的应用名
    AppName=nginx
    #启动命令
    startComment=/usr/local/nginx/sbin/nginx
    
    if [ "$1" = "" ];
    then
        echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
        exit 1
    fi
    
    if [ "$AppName" = "" ];
    then
        echo -e "\033[0;31m 未输入应用名 \033[0m"
        exit 1
    fi
    
    function start()
    {
        PID=`ps -ef |grep $AppName|grep -v grep|awk '{print $2}'`
    
    	if [ x"$PID" != x"" ]; then
    	    echo "$AppName is running..."
    	else
    		$startComment
    		echo "Start $AppName success..."
    	fi
    }
    
    function stop()
    {
        echo "Stop $AppName"
    	
    	PID=""
    	query(){
    		PID=`ps -ef |grep $AppName|grep -v grep|awk '{print $2}'`
    	}
    
    	query
    	if [ x"$PID" != x"" ]; then
    		kill -TERM $PID
    		echo "$AppName (pid:$PID) exiting..."
    		while [ x"$PID" != x"" ]
    		do
    			sleep 1
    			query
    		done
    		echo "$AppName exited."
    	else
    		echo "$AppName already stopped."
    	fi
    }
    
    function restart()
    {
        stop
        sleep 2
        start
    }
    
    function status()
    {
        PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
        if [ $PID != 0 ];then
            echo "$AppName is running..."
        else
            echo "$AppName is not running..."
        fi
    }
    
    case $1 in
        start)
        start;;
        stop)
        stop;;
        restart)
        restart;;
        status)
        status;;
        *)
    
    esac

     

    展开全文
  • Java程序运行、停止Shell脚本

    千次阅读 2013-11-01 16:16:52
    用Java程序来控制shell脚本的运行和停止。具体来讲,这个Java程序至少要有三个功能: 运行Shell脚本;等待Shell脚本执行结束;停止运行中的Shell程序; 从功能需求来看,似乎是比较容易做到的。尽管没有写过...

    用Java程序来控制shell脚本的运行和停止。具体来讲,这个Java程序至少要有三个功能:

    1. 运行Shell脚本;
    2. 等待Shell脚本执行结束;
    3. 停止运行中的Shell程序;

    从功能需求来看,似乎是比较容易做到的。尽管没有写过类似功能的程序,Google一下,很快就有答案了。

    用Runtime或者ProcessBuilder可以运行程序,而Process类的waitFor()和destroy()方法分别满足功能2和3。

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    public class ShellRunner extends Thread
    {
      private Process proc;
      private String dir;
      private String shell;
    
      public ShellRunner(String dir, String shell)
      {
        super();
        this.proc = null;
        this.dir = dir;
        this.shell = shell;
      }
    
      @Override
      public void run() {
        try
        {
          ProcessBuilder builder = new ProcessBuilder("sh", dir + shell);
          builder.directory(new File(dir));
    
          proc = builder.start();
          System.out.println("Running ...");
          int exitValue = proc.waitFor();
          System.out.println("Exit Value: " + exitValue);
        }
        catch (IOException e)
        {
          e.getLocalizedMessage();
        }
        catch (InterruptedException e)
        {
          e.getLocalizedMessage();
        }
      }
    
      public void kill()
      {
        if (this.getState() != State.TERMINATED) {
          proc.destroy();
        }
      }
    
      public static void main(String args[]) {
        ShellRunner runner = new ShellRunner("/tmp/", "run.sh");
        runner.start();
    
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(inputStreamReader);
        try
        {
          String line = null;
          while ( (line = reader.readLine()) != null ) {
            if (line.equals("kill")) {
              runner.kill();
            }
            else if (line.equals("break")) {
              break;
            }
            else {
              System.out.println(runner.getState());
            }
          }
          reader.close();
          inputStreamReader.close();
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
    
      }
    }
    
    waitFor()方法可以正确等待shell程序退出,但是destroy()方法并没有结束shell脚本相关的进程。

    这是一个BUG

    JDK-bug-4770092:Process.destroy()不能结束孙子进程(grandchildren)。


    展开全文
  • 但是,为了方便管理,我们还可以通过Shell来编写一些用于启动应用的脚本,比如下面几个: 关闭应用的脚本:stop.sh #!/bin/bash PID=$(ps -ef | grep yourapp.jar | grep -v grep | awk '{ print $2 }') if [ -z "$...

    我们知道启动springboot的项目有三种方式:

    • 运行主方法启动
    • 使用命令 mvn spring-boot:run”在命令行启动该应用
    • 运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行。

    我们在开发的时候,通常会使用前两种,而在部署的时候往往会使用第三种。但是,我们在使用java -jar来运行的时候,并非后台运行。

    下面我们来说说服务器上如何后台启动springboot项目。实际上,实现的方法有很多种,这里就列两种还比较好用的方式:

    nohup和Shell

    该方法主要通过使用nohup命令来实现,该命令的详细介绍如下:

    示例:nohup 命令

    用途:不挂断地运行命令。

    语法:nohup Command [ Arg … ][ & ]

    描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 &到命令的尾部。

    nohup java -jar xxx.jar &

    这样执行后,nohup会把执行结果中的日志输出到当前文件夹下面的nohup.out文件中,通常情况下我们使用以上命令即可。 

    我们也可以手动指定一个参数来规定日志文件的输出地点,如:

    nohup java -jar xxx.jar > catalina.out  2>&1 &

    如果不需要输出日志,可以使用如下命令

    nohup java -jar xxx.jar >/dev/null &

    所以,我们只需要使用nohup java -jar yourapp.jar &命令,就能让yourapp.jar在后台运行了。但是,为了方便管理,我们还可以通过Shell来编写一些用于启动应用的脚本,比如下面几个:

    • 关闭应用的脚本:stop.sh
    #!/bin/bash
    PID=$(ps -ef | grep yourapp.jar | grep -v grep | awk '{ print $2 }')
    if [ -z "$PID" ]
    then
        echo Application is already stopped
    else
        echo kill $PID
        kill $PID
    fi
    • 启动应用的脚本:start.sh
    #!/bin/bash
    nohupjava -jar yourapp.jar --server.port=8888 &
    • 整合了关闭和启动的脚本:run.sh,由于会先执行关闭应用,然后再启动应用,这样不会引起端口冲突等问题,适合在持续集成系统中进行反复调用。
    #!/bin/bash
    echostop application
    sourcestop.sh
    echostart application
    sourcestart.sh

    系统服务

    在Spring Boot的Maven插件中,还提供了构建完整可执行程序的功能,什么意思呢?就是说,我们可以不用java -jar,而是直接运行jar来执行程序。这样我们就可以方便的将其创建成系统服务在后台运行了。主要步骤如下:

    • 在pom.xml中添加Spring Boot的插件,并注意设置executable配置
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-maven-plugin</artifactId> 
          <configuration>
            <executable>true</executable>
          </configuration>
        </plugin>
      </plugins>
    </build>
    • 在完成上述配置后,使用mvn install进行打包,构建一个可执行的jar包

    • 创建软连接到/etc/init.d/目录下

    sudo ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
    • 在完成软连接创建之后,我们就可以通过如下命令对yourapp.jar应用来控制启动、停止、重启操作了
    /etc/init.d/yourapp start|stop|restart

    综上,一般情况下我们使用以下命令即可:

    nohup java -jar xxx.jar &

    编写springboot 启动停止脚本

    #!/bin/bash
    #设置环境变量
    export JAVA_HOME=/usr/local/jdk1.8.0_181
    export JRE_HOME=/$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
     
    #这里可替换为你自己的执行程序,其他代码无需更改
    APP_NAME=filename.jar
    #使用说明,用来提示输入参数
    usage() {
        echo "Usage: sh restart.sh [start|stop|restart|status]"
        exit 1
    }
     
    #检查程序是否在运行
    #grep -v反选匹配 awk指定文件某一行
    is_exist(){
      pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
      #如果不存在返回1,存在返回0    
      if [ -z "${pid}" ]; then
       return 1
      else
        return 0
      fi
    }
     
    #启动方法
    start(){
      is_exist
      if [ $? -eq 0 ]; then
        echo "${APP_NAME} is already running. pid=${pid}"
      else
        nohup java -jar ${APP_NAME} --spring.profiles.active=uat >/null 2>&1 &
      fi
    }
     
    #停止方法
    stop(){
      is_exist
      if [ $? -eq "0" ]; then
        kill -9 $pid
      else
        echo "${APP_NAME} is not running"
      fi 
    }
     
    #输出运行状态
    status(){
      is_exist
      if [ $? -eq "0" ]; then
        echo "${APP_NAME} is running. Pid is ${pid}"
      else
        echo "${APP_NAME} is NOT running."
      fi
    }
     
    #重启
    restart(){
      stop
      sleep 5
      start
    }
     
    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
      "start")
        start
        ;;
      "stop")
        stop
        ;;
      "status")
        status
        ;;
      "restart")
        restart
        ;;
      *)
        usage
        ;;
    esac

    创建文件之后,赋予执行权限,命令执行文件即可。

    chmod u+x file.sh

    使用命令:

    Usage: sh restart.sh [start|stop|restart|status]

    转载:

    linux下后台启动springboot项目

    展开全文
  • Linux中编写Shell脚本

    万次阅读 多人点赞 2018-10-08 11:22:35
    Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[]符号的运算示例 Shell脚本的条件测试 几种...
    展开全文
  • 收藏!一篇教会你写90%的shell脚本

    万次阅读 多人点赞 2019-09-06 18:18:36
    还不会写shell脚本?这篇文章教会你写90%的shell脚本
  • Shell脚本

    万次阅读 2020-10-04 20:29:52
    Shell脚本 这里写目录标题Shell脚本1.Shell脚本简介2.Shell2.1 Shell 脚本的解释器2.2 脚本的编写规范2.3 执行脚本的三种方式2.4变量的声明2.5变量的引用2.6删除变量 只读变量2.7字符串使用2.8字符串长度及截取2.9...
  • linux 启动或停止jar shell脚本

    千次阅读 2015-11-16 15:19:01
    shell脚本 # jar启动shell命令 #startup.sh java -jar project.jar & # 注意:必须有&让其后台执行,否则没有pid生成 echo $! > project.pid # 将jar包启动对应的pid写入文件中,为停止时提供pid # jar停止shell...
  • shell脚本的作用,第一个shell脚本shell脚本的变量,shell给定的特殊变量,shell脚本的三种赋值方式
  • Shell脚本学习(二)制作SSH登录远程服务器的Shell脚本
  • shell脚本基本语法详解

    万次阅读 多人点赞 2016-09-28 20:16:04
    编写shell脚本的时候,最前面要加上一行:#!/bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器。一.shell变量shell变量和...
  • shell脚本自动生成注释,这样以后写脚本就会方便很多
  • Shell脚本备忘录

    万次阅读 2021-08-16 23:29:00
    ${#} 获取变量字符串长度 [root@localhost testShell]# x=1024 [root@localhost testShell]# echo "length=${#x}" length=4 2.2 引用脚本或函数参数 1 表示 Shell 脚本文件名,n 从 2 开始表示第 n 个参数,第 2 个...
  • shell脚本大全

    热门讨论 2012-11-04 16:36:09
    shell脚本大全
  • shell脚本精简教程

    万人学习 2016-12-19 14:54:59
    详细的介绍shell脚本的使用。
  • 文章目录基于 Shell 脚本启动、停止 ...常规的SpringBoot应用是通过java -jar *.jar方式来启动的,为了更好的管理SpringBoot应用的生命周期,可以通过使用Shell脚本来实现对其生命周期的控制。 场景分析 通过Shel...
  • tomcat 启动 停止 重启 shell 脚本
  • Linux shell脚本习题

    千人学习 2019-03-17 08:51:33
    Shell脚本是Linux运维、自动化运维体系中不可或缺的一个非常重要的部分,几乎所有的招聘需求中都会要求会写Shell脚本。 很多人都觉得Shell脚本不会写,写不出来。这就是因为练习不够。体系课程一共包含100道Shell...
  • shell脚本中执行命令Shell is a command-line interpreter that allows the user to interact with the system. It is responsible for taking inputs from the user and displaying the output. Shell是一个命令行...
  • shell脚本 > /dev/null 2>&1
  • Shell - 传递参数到Shell 脚本

    千次阅读 2019-10-26 10:41:41
    文章目录Shell - 传递参数到Shell 脚本1、参数传递规则2、参数引用规则3、执行文件参数4、获得传递的参数个数5、其它特殊组合 Shell - 传递参数到Shell 脚本 1、参数传递规则 以空格分隔开 ./xxx.sh 1 2 3 2、参数...
  • IDEA中编写并运行shell脚本

    万次阅读 多人点赞 2018-07-31 09:25:37
    IEDA中的bashsupport插件支持在IDEA中编写shell脚本文件,有友好的代码格式,支持自动补全,检查错误,并且配置完之后,还可以在IEDA中直接运行shell脚本。下面将一步一步演示插件的安装和配置。 打开IEDA,安装...
  • 现在在用python的scrapy框架写爬虫,爬虫在docker容器里面运行,我们用shell脚本调用docker容器里面的python脚本运行爬虫程序,如何让爬虫程序传一个状态码给shell脚本
  • 【Linux】shell脚本概述

    千次阅读 热门讨论 2020-08-05 11:40:18
    文章目录前言shell脚本的概念shell脚本的结构 前言 本系列为循序渐进学运维系列的shell脚本实战部分,从零带你学脚本。 shell脚本的概念 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一...
  • Shell脚本及钩子

    千次阅读 2017-04-05 19:52:10
    原文地址Shell脚本 什么是Shell脚本为什么要用脚本 创建一个简单脚本 运行脚本 Shell命令的组合运用 Shell的变量 Shell控制语句 if then elif fi case esac fordodone whiledodone Shell脚本的调试方法 Shell函数 ...
  • shell脚本编写笔记

    千次阅读 2019-07-26 14:32:28
    本文主要介绍如何编写简单的shell脚本,给shell脚本传参,shell脚本获取当前运行时间,通过shell执行hql语句。
  • linux shell 脚本攻略

    热门讨论 2013-06-15 09:07:31
    linux shell资料合集。包含两本书。linux shell 脚本攻略, 脚本学习指南。
  • Shell脚本(一)

    万次阅读 多人点赞 2018-07-30 08:44:01
    20.1 什么是Shell脚本 shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。 假如完成某个需求需要一口气输入10条命令,对于简单的命令...
  • Shell脚本运行中的停止方法

    万次阅读 2020-08-21 20:53:26
    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理? 方式1 killall file-flume-kafka 说明:killall是一个命令,不是kill all,file-flume-kafka是脚本名,此方法简单粗暴。 方式二 ssh $i "ps -...
  • 1Shell脚本调试方法 Shell提供了一些用于调试脚本的选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。-v,一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。-x,提供跟踪执行信息,将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561,835
精华内容 224,734
关键字:

如何停止shell脚本